You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现指定字母数字拼接序列逻辑错误求助

问题分析

首先明确目标序列的核心规律:

  • 第k项的数字部分固定为2*k,每次固定递增2
  • 字母部分按A-Z顺序排列,跳过的字母满足:字母序号(A=1,B=2……Z=26)等于两个连续正整数的乘积,即k*(k+1),对应跳过的字母为B(2=12)、F(6=23)、L(12=34)、T(20=45)等

原代码存在3个问题:

  1. 未导入java.util.Scanner依赖,编译会报错
  2. 循环条件写为i<=n,输入n时会生成n+1项,和需求不符
  3. 仅在a==4时额外跳一次字母,只能跳过第一个要排除的B,后续要排除的F、L等字母没有对应处理逻辑
正确实现代码

通用规则版本(无需硬编码跳过字母)

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int num = 2;
        char ch = 'A';
        for (int i = 0; i < n; i++) {
            System.out.print(ch + "" + num + " ");
            num += 2;
            ch++;
            // 通用判断:字母序号是否为连续两个正整数的乘积
            int charSeq = ch - 'A' + 1;
            int sqrtVal = (int) Math.sqrt(charSeq);
            if (sqrtVal * (sqrtVal + 1) == charSeq) {
                ch++;
            }
        }
        sc.close();
    }
}

固定跳过字母版本(适合规则固定的场景)

如果跳过的字母是固定的少量值,可以直接硬编码判断,性能更高:

import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int num = 2;
        char ch = 'A';
        for (int i = 0; i < n; i++) {
            System.out.print(ch + "" + num + " ");
            num += 2;
            ch++;
            // 直接判断是否为要跳过的字母
            if (ch == 'B' || ch == 'F' || ch == 'L' || ch == 'T') {
                ch++;
            }
        }
        sc.close();
    }
}
验证结果

输入10时,两个版本的输出均为:A2 C4 D6 E8 G10 H12 I14 J16 K18 M20,完全符合预期。

内容的提问来源于stack exchange,提问作者Dark3963

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:51:02