java - 扫描器nextInt()导致循环内无休止的错误

标签 java java.util.scanner

这个问题已经有了答案:
How to handle infinite loop caused by invalid input (InputMismatchException) using Scanner
5个答案
当用户输入的不是数字时,以下代码会输出无休止的错误。

Scanner scn = new Scanner(System.in);
System.out.println("Enter the number: ");   
int n = 0;  
while(true){
    try {
        n = scn.nextInt();
    } catch (Exception e) {
        e.printStackTrace();
        continue;
    }
    break;
}

我希望当用户输入的不是数字时,代码等待新的输入。

最佳答案

来自爪哇,
当扫描器抛出输入不匹配异常时,扫描器将不会
传递导致异常的令牌,以便可以检索到它
或者通过其他方法跳过。
在您的情况下,scn.nextInt()必须引发inputMismatchException。但是令牌没有被传递(换句话说,输入令牌挂在那里由扫描程序传递)。因此,在循环的下一次迭代中,scn.nextint()再次读取同一个标记,并再次抛出异常,导致无限循环。
如果检查CharBuffer(heapCharBuffer?)在scanner对象中,它仍然包含您第一次键入的并导致此问题的输入。此外,您不能显式清除扫描仪的缓冲区。
另外,小心资源泄漏!

关于java - 扫描器nextInt()导致循环内无休止的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54305087/

相关文章:

java - 比较两个文件并确定哪些行不同

java - 如何在 SwaggerUI 中显示父项目的端点

java - 按后退按钮可在 fragment 中查看

java - Gradle Maven 发布 : task to publish only one

java - Kotlin 中的 Java Scanner 相当于什么?

java - 如何获取一个整数以将值设置为与扫描仪相同

java - 更大尺寸屏幕中的布局间距问题

java - 使用 Java 打开终端窗口

java - 从文件读取输入流打印丢失的字符

java - 将扫描仪输入拆分为字符串