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

