Java 为什么我得到一个输入无效的无限循环?
当最初的选择无效时,为什么这会让我陷入无休止的循环Java 为什么我得到一个输入无效的无限循环?,java,exception,java.util.scanner,infinite-loop,inputmismatchexception,Java,Exception,Java.util.scanner,Infinite Loop,Inputmismatchexception,当最初的选择无效时,为什么这会让我陷入无休止的循环 while (true) { System.out.print("Choice:\t"); try { int choice = scanner.nextInt(); break; } catch (InputMismatchException e) { System.out.println("Invalid Input!"); } } 输出: Choice: d
while (true) {
System.out.print("Choice:\t");
try {
int choice = scanner.nextInt();
break;
} catch (InputMismatchException e) {
System.out.println("Invalid Input!");
}
}
输出:
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!
从:
当扫描器抛出异常时,扫描器不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌
因此,
“df”
字符串仍在扫描仪中。您必须通过调用next()
或其他方法以某种方式清除它。Scanner试图一次又一次地解析并返回相同的标记(而且它不是整数,所以它会引发异常)。您可以通过丢弃无效令牌来修复它:
while (true) {
System.out.print("Choice:\t");
try {
int choice = scanner.nextInt();
break;
} catch (InputMismatchException e) {
System.out.println("Invalid Input!");
scanner.next(); // here, discard invalid token.
}
}
只在try子句中打断while语句。当你的while循环进入catch时,它只是不打破循环
while (true) {
System.out.print("Choice:\t");
try {
int choice = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Invalid Input!");
}
finally {
break;
}
}
你必须把
break
放在finally
子句中。在catch
子句中放一个break
。但是while(true)
循环的目的是什么呢?请将break
也放入catch
clause.+1以供正式的JavaDoc参考并解释原因。谢谢这一直困扰我一段时间。