try catch 块导致无限循环?

Ada*_*one 1 java try-catch infinite-loop

我正在编写一个简单的 java 控制台游戏。我使用扫描仪读取来自控制台的输入。我试图验证我是否要求输入一个整数,如果输入字母,我不会收到错误。我试过这个:

boolean validResponce = false;
int choice = 0;
while (!validResponce)
{
    try
    {
        choice = stdin.nextInt();
        validResponce = true;
    }
    catch (java.util.InputMismatchException ex)
    {
        System.out.println("I did not understand what you said. Try again: ");
    }
}
Run Code Online (Sandbox Code Playgroud)

但它似乎创建了一个无限循环,只是打印出 catch 块。我究竟做错了什么。

是的,我是 Java 新手

Ern*_*ill 5

nextInt()不会丢弃不匹配的输出;程序会尝试一遍又一遍地读取它,但每次都会失败。在调用之前使用该hasNextInt()方法确定是否有int可用的内容可供读取 nextInt()

确保当您发现除InputStream整数之外的其他内容时,您可以将其清除,nextLine()因为hasNextInt()也不会丢弃输入,它只是测试输入流中的下一个标记。