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

Java新手求助:带用户输入的for循环无限循环问题排查

解决Scanner输入无效时的无限循环问题

嘿,我懂你现在的困扰——这绝对是Java Scanner刚上手时最容易踩的坑之一!你的思路其实没问题:输入无效就不递增循环计数,但问题出在无效输入还留在Scanner的缓冲区里,导致每次循环都重复读到同一个无效内容,进而无限触发"Invalid Number"提示。

问题根源

当你输入一个非整数(比如字母、符号)时,scanner.hasNextInt()会返回false,但这个无效的输入并没有被消费掉——它还卡在输入缓冲区里。下一次循环执行hasNextInt()时,依然会读到这个无效内容,再次返回false,如此往复就陷入了无限循环。

修复方案

只需要在else块里添加一行scanner.next(),把缓冲区里的无效输入丢弃掉,这样下一次循环就能正常等待用户的新输入了。同时你之前的i--是对的,用来抵消for循环自动递增的计数,确保无效输入不占用10次机会。

修正后的完整代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int sum = 0;
        Scanner scanner = new Scanner(System.in);
        for(int i = 1; i<=10; i++){
            System.out.println("Enter number #" + i + " ");
            boolean validInt = scanner.hasNextInt();
            if(validInt){
                int num = scanner.nextInt();
                sum += num;
            } else{
                System.out.println("Invalid Number");
                // 丢弃缓冲区里的无效输入
                scanner.next();
                // 不消耗循环次数
                i--;
            }
        }
        System.out.println("Sum was " + sum);
        scanner.close();
    }
}

额外小提示

如果想让用户可以连续输入多次无效内容直到输入正确,也可以把判断改成一个while循环,这样就不需要手动调整i的值,逻辑会更清晰:

// 替换原来的if-else块
while (!scanner.hasNextInt()) {
    System.out.println("Invalid Number, please try again:");
    scanner.next();
}
int num = scanner.nextInt();
sum += num;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:17:39