从http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt%28int%29:
“如果翻译成功,则扫描程序将前进经过匹配的输入。”
啊,但是如果翻译是什么 不是 成功的?在这种情况下,扫描仪不会前进超过任何输入。错误的输入数据将保留为下一个要扫描的内容,因此循环的下一次迭代将失败,就像上一个循环一样- 循环将不断尝试读取相同的错误输入。
为了防止无限循环,您必须提前越过不良数据,以便获取扫描程序可以读取为整数的值。下面的代码段通过调用input.next()来实现:
Scanner input = new Scanner(system.in);
while(true){
try {
int choice = input.nextInt();
System.out.println("Input was " + choice);
} catch (InputMismatchException e){
String bad_input = input.next();
System.out.println("Bad input: " + bad_input);
continue;
}
}