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

Java Scanner PIN输入验证捕获InputMismatchException后无限循环问题求助

解决Scanner输入非整数后无限循环的问题

嘿,我太懂你这个烦恼了!刚学Java用Scanner的时候很容易踩这个坑~

问题出在Scanner的输入缓冲区:当用户输入了非整数(比如字母、符号),nextInt()会触发InputMismatchException,但那个无效的输入内容并没有被从缓冲区里移除。所以下一次循环执行nextInt()时,它还是会读取到同一个无效输入,直接再次抛出异常,就陷入无限循环了。

给你改好的代码,只需要在catch块里加一行就能解决:

System.out.println("Please enter your pin. Please note that only numbers are allowed for this selection.");
boolean valid = false;
while(!valid) {
    try {
        pin = parser.nextInt();
        valid = true;
    } catch (InputMismatchException error) {
        System.out.println("Please use only numbers in your pin.");
        // 关键:消费掉缓冲区里的无效输入行
        parser.nextLine();
    }
}

简单解释下这行parser.nextLine()的作用:它会把缓冲区里剩下的整行无效内容(包括用户输入的非整数和换行符)全部清空,这样下一次循环时,Scanner就能重新等待用户输入新的内容,而不是重复读取旧的无效输入啦。

如果之后你还要用nextLine()读取其他文本输入,可能需要额外注意缓冲区里的换行符,但在你这个只需要整数PIN的场景里,这个修改完全够用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:32:42