Jos*_*ett 2 java exception infinite-loop java.util.scanner inputmismatchexception
当初始选择无效时,为什么这会导致我陷入无限循环?
while (true) {
System.out.print("Choice:\t");
try {
int choice = scanner.nextInt();
break;
} catch (InputMismatchException e) {
System.out.println("Invalid Input!");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Choice: df
Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Run Code Online (Sandbox Code Playgroud)
来自Javadoc:
当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的标记,因此可以通过其他方法检索或跳过它.
所以"df"
字符串仍然在扫描仪中.你必须通过电话next()
或其他方式以某种方式清除它.