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

do-while循环捕获异常问题及Java程序修复请求

解决do-while循环捕获InputMismatchException后无限循环的问题

我来帮你拆解这个问题的根源,再给出具体的修复方案:

为什么会无限循环?

当你输入非整数(比如字母、符号或者中文)时,Scanner.nextInt()没办法解析这个输入,这个无效的输入会一直留在Scanner的输入缓冲区里。之后每次循环执行key.nextInt()时,都会重复读取到这个没被处理的无效输入,不断触发InputMismatchException,导致程序一直在输出"Invalid",根本没机会让你输入新内容。

怎么修复?

核心就是在捕获异常后,把缓冲区里的无效输入清空,这样下一次循环时Scanner才能接收新的输入。具体来说,在catch块里添加key.nextLine()语句,它会把缓冲区里剩余的所有字符(包括换行符)都读取掉,清空缓冲区。

另外我给你加了一点交互提示,让用户更清楚该输入什么,体验更好。

修复后的完整代码

import java.util.*;
import java.io.*;

public class test {
    public static void main(String[] args) {
        Scanner key = new Scanner(System.in);
        boolean clear;
        int in = 0;
        do {
            clear = true;
            try {
                System.out.print("请输入一个整数:");
                in = key.nextInt();
            } catch (InputMismatchException e) {
                System.out.println("Invalid输入,请输入一个有效的整数!");
                clear = false;
                // 清空缓冲区中的无效输入,避免无限循环
                key.nextLine();
            }
        } while (!clear);
        String stringIn = Integer.toString(in);
        String[] dec = stringIn.split("");
        for (int i = 1; i < dec.length; i++) {
            System.out.print(dec[i] + " ");
        }
    }
}

小补充

如果你的无效输入里包含空格,用key.next()只会读取到空格前的部分,没法彻底清空缓冲区,所以用key.nextLine()是更稳妥的选择,能一次性处理掉整行的无效输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:46:31