首页 > 解决方案 > Java 扫描器 - 循环直到用户提供正确的输入

问题描述

代码的期望行为如下: 要求用户输入。当他们提供不正确的输入时,他们会再次被询问,直到他们最终输入一个有效值。

这是一个最小的例子:

int[] t = new int[2];
Scanner scanner = new Scanner(System.in);
while (true) {
    try {
        int k = scanner.nextInt();
        System.out.println(t[k]);
        break;
    } catch (Exception e) {
        System.out.println(e);
    }
}
scanner.close();

(1)如果用户键入“-1”,则在他们必须再次键入之后打印相应的异常(即“java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 2”)(正如预期的那样) .

(2)但是,如果用户键入“a”,相应的异常(即“java.util.InputMismatchException”)会被无休止地打印出来。

那么,你能解释一下 Scanner 类为什么/如何导致问题,以及如何解决它?

标签: javaloopsexceptionjava.util.scanner

解决方案


(我在查看问题时想出了答案。也许这可以帮助其他人)

由于该指令引发了异常 int k = scanner.nextInt(); ,因此该指令未完成,因此“System.in”的“下一个”元素仍然相同(在示例(2)中为“a” )。因此,它无休止地引发相同的异常。

为了解决这个问题,我只需要添加catchscanner.nextLine();语句,这会导致程序要求新的用户输入。


推荐阅读