作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这个问题已经有了答案:
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/
我正在 CSS 和 JS 中使用 Canvas 上的 DOM 创建一个类似小行星的简单游戏,用于……实验目的。 在这个例子中我的代码非常小,可以很容易地看到下面发生了什么。最终目标:让箭头键顺畅地旋转
我是一名优秀的程序员,十分优秀!