异常后,扫描仪无法读取用户输入

时间:2014-09-10 11:57:06

标签: java

为什么在发生异常后Scanner不会读取值?这是代码。抛出异常时,在下一次迭代中它不允许用户输入数据,它总是进入catch块并打印文本。

public class Main {
    public static void main(String[] args) {
        Scanner inputScanner = new Scanner(System.in);
        boolean correctInput = false;
        do {
            try {
                int readInt = inputScanner.nextInt();
                correctInput = true;
            } catch (InputMismatchException e) {
                correctInput = false;
                System.out.println("Please enter int value");
            }
        } while (!correctInput);

    }
}

2 个答案:

答案 0 :(得分:2)

nextInt不会消耗非整数值,因此一旦发生异常,任何此类输入都将 ad infinitum 传递给异常块。因此,您需要使用此值

} catch (InputMismatchException e) {
      System.err.println("Invalid integer: " + inputScanner.nextLine());
      ...
}

或者更好地使用hasNextInt

while (inputScanner.hasNextInt()) {
  ... // no boolean flag needed
}

答案 1 :(得分:0)

} catch (InputMismatchException e) {
            correctInput = false;
            System.out.println("Please enter int value");
            inputScanner.next();
   }

使用一个令牌并继续