【问题标题】:Infinite loop while catching an exception捕获异常时无限循环
【发布时间】:2016-05-30 01:15:45
【问题描述】:

我正在尝试从 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");
     }
  }

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

【问题讨论】:

  • 你说得对,我是在匆忙复制代码后添加了布尔值,当然当声明done时为false。
  • 为什么不重复try块呢?
  • 您是否设置了扫描仪?如果有,请将其包含在代码中。
  • 我做了,它第一次要求输入。我在 API 文档中找到了答案。谢谢!
  • 我刚刚找到了确切的答案:当扫描器抛出 InputMismatchException 时,扫描器不会传递导致异常的令牌,因此可以通过其他方法检索或跳过它。你是从这里得到的吗:docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

标签: java exception while-loop try-catch infinite-loop


【解决方案1】:

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

【讨论】:

  • 感谢法拉兹! (在这种情况下,我为 Scanner.next() 创建了一个字符串,然后解析为一个整数,将捕获更改为适当的异常)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
相关资源
最近更新 更多