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

Java程序计算数字首尾位相加时遇无限循环问题求助

解决Java程序无限循环与输入异常问题

我来帮你排查下代码里的问题,你的程序出现无限循环和持续要求输入的情况,主要是两个核心原因导致的,咱们逐个拆解清楚:

1. 无限循环的根源:while循环未更新循环变量

你写的while循环条件是n[i]>=10,但循环体里只做了first=n[i]/10,却完全没修改n[i]的值!这就导致n[i]一直保持你输入的初始数值,永远满足>=10的条件,循环根本停不下来。

举个例子:如果你输入123,第一次循环时first=12,但n[i]还是123;第二次循环first还是12,n[i]依旧是123,就这么无限重复下去了。

正确的做法是在循环里更新变量,让它不断缩小直到小于10,循环才能正常终止。两种写法供你选:

  • 写法一:直接修改原数组的n[i]
while(n[i] >= 10){
    n[i] = n[i]/10; // 关键:每次循环都让n[i]缩小10倍
    first = n[i];
}
  • 写法二:用单独的变量处理,不修改原数组(更推荐,逻辑更清晰)
first = n[i];
while(first >= 10){
    first = first / 10;
}

2. 持续要求输入的原因:多余的sc.nextLine()搞乱了输入逻辑

你在n[i]=sc.nextInt();之后加了sc.nextLine(),这会导致输入流程异常。因为nextInt()只会读取数字部分,不会读取输入完成后的换行符,sc.nextLine()会直接把这个换行符吃掉。如果你的测试用例是连续输入的(比如先输入2,接着输入123 456),第二次调用sc.nextInt()时就可能读到空内容,导致程序卡住或者抛出异常,看起来就像一直在要求输入。

解决办法很简单:直接删掉这句sc.nextLine()就好,nextInt()会自动跳过空格、换行这类分隔符,完全不需要额外处理。

修复后的完整代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt(); // 测试用例数量
        int[] n = new int[t];
        int last, first;

        for(int i = 0; i < t; i++){
            n[i] = sc.nextInt();
            last = n[i] % 10;
            // 每次循环都重新初始化first,避免残留上一次的结果
            first = n[i];
            while(first >= 10){
                first = first / 10;
            }
            System.out.println(first + last);
        }
        sc.close(); // 用完记得关闭Scanner,释放资源
    }
}

额外小提醒

  • 每次循环要重新初始化first,不然如果上一次循环的first值小于10,这一次输入的数字也是个位数的话,会直接用上一次的结果,导致计算错误。
  • 养成用完Scanner就关闭的好习惯,避免资源浪费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:42:50