Java 扫描程序 - 循环,直到用户提供正确的输入 [duplicate]

Java scanner - Loop until the user provides a correct input [duplicate]

提问人:Argemione 提问时间:6/22/2021 更新时间:6/22/2021 访问量:305

问:

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

下面是一个最小的示例:

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 类导致问题的原因/方式以及如何解决它吗?

循环 异常 java.util.scanner

评论


答:

1赞 Argemione 6/22/2021 #1

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

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

为了修复它,我只需要添加 catch 语句,这会导致程序要求新的用户输入。scanner.nextLine();