Java尝试捕获,直到没有抛出异常

Dan*_*ira 4 java exception

我试图使用扫描仪和无限循环从用户获取一个整数.我知道解决这个问题的解决方案,但我一直想知道为什么我的第一种方法不能正常工作?

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于第一次迭代,但它只是在屏幕上永远打印"无效,再试一次".

xia*_*.li 10

从Scanner API文档:

当扫描程序抛出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
    }
}
Run Code Online (Sandbox Code Playgroud)