我正在尝试使用扫描程序和无限循环从用户获取整数。我知道解决这个问题的解决方案,但我一直想知道为什么我的第一种方法不能正常工作?
Scanner myScanner = new Scanner(System.in);
int x = 0;
while(true){
try{
System.out.println("Insert a number: ");
x = myScanner.nextInt();
break;
}catch(InputMismatchException e){
System.out.println("Invalid, try again.");
continue;
}
}
它适用于第一次迭代,但它只是继续打印"无效,再试一次"在屏幕上永远。
答案 0 :(得分:9)
当扫描程序抛出InputMismatchException时,扫描程序将不会传递导致异常的标记,因此可以通过其他方法检索或跳过它。
因此无效令牌仍然存在,导致另一个异常而另一个异常......另一个......
Scanner myScanner = new Scanner(System.in);
int x = 0;
while(true){
try{
System.out.println("Insert a number: ");
x = myScanner.nextInt();
break;
}catch(InputMismatchException e){
System.out.println("Invalid, try again.");
myScanner.next(); // skip the invalid token
// continue; is not required
}
}
答案 1 :(得分:4)
@LukeLee's solution的替代方案:
Scanner myScanner = new Scanner(System.in);
int x = 0;
while(true){
try{
System.out.println("Insert a number: ");
x = Integer.parseInt(myScanner.next());
break;
}catch(NumberFormatException e){
System.out.println("Invalid, try again.");
// continue is redundant
}
}