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
相关产品推荐
相关产品推荐

