Java 捕获异常时执行无限循环

Java 捕获异常时执行无限循环,java,exception,while-loop,try-catch,infinite-loop,Java,Exception,While Loop,Try Catch,Infinite Loop,我试图从System.in中获取一个整数,并希望捕获最终的错误。代码如下: int dim; boolean done = false; while(!done) { try { dim = in.nextInt(); done=true; } catch(InputMismatchException e) { System.out.println("I need an integer");

我试图从System.in中获取一个整数,并希望捕获最终的错误。代码如下:

int dim;
boolean done = false;

while(!done)
  {
     try
     {
        dim = in.nextInt();
        done=true;
     }
     catch(InputMismatchException e)
     {
        System.out.println("I need an integer");
     }
  }

我得到的结果是错误字符串的无限循环。我做错了什么?我是否试图捕获错误的异常?

“当扫描仪抛出InputMismatchException时,扫描仪将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。”

当扫描器抛出InputMismatchException时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌。“

你说得对,我在匆忙复制代码后添加了布尔值,当然,如果声明的“完成”为false,那么为什么不重复try块?是否设置了扫描仪?如果你做了,请在代码中包含它。我做了,它第一次要求输入。我在API文档中找到了答案。谢谢我刚刚找到了确切的答案:当扫描器抛出InputMismatchException时,扫描器不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。你是从这里得到的吗:你是对的,我在匆忙复制代码后添加了布尔值,当然,当声明的done为false时。为什么try块不重复?你设置了扫描仪吗?如果你做了,请在代码中包含它。我做了,它第一次要求输入。我在API文档中找到了答案。谢谢我刚刚找到了确切的答案:当扫描器抛出InputMismatchException时,扫描器不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。你是从这里得到的吗:谢谢法拉兹!(在本例中,我为Scanner.next()创建了一个字符串,然后解析为整数,将捕获更改为适当的异常)。谢谢Faraz!(在本例中,我为Scanner.next()创建了一个字符串,然后解析为整数,将捕获更改为相应的异常)。