This question already has answers here:
How to handle infinite loop caused by invalid input (InputMismatchException) using Scanner
                                
                                    (5个答案)
                                
                        
                                4年前关闭。
            
                    
我想读取用户选择和输入的整数值,但是不希望异常发生,如果用户犯了错误并输入了无法读取的值,则会使程序崩溃。为此,我编写了一个while循环,其中包含一个try / catch序列,该序列旨在在输入无效的情况下返回简短的语句来解释用户的错误,并提示您重试。

当我使用此代码运行程序时,尽管我用来读取用户输入的Scanner对象在循环的第一遍似乎正常工作,但在随后的遍历中,try语句会自动失败,而无需等待新的输入,这自然导致一系列错误消息和提示。

这是我的代码:

        Scanner tScan = new Scanner(System.in);
        int gChoice = 0;
        boolean gValid = false;
        while (!gValid)
        {
            try{
                gChoice += tScan.nextInt();
                gValid =true;
            } catch(Exception e){
                System.out.println("Input rejected. Please try again:");
            }
        }


该程序在gChoice += tScan.nextInt();处暂停,并且仅在用户输入了一些数据并且tScan试图从中收获一个整数时才会继续。如果找不到整数,则继续执行catch语句,返回到循环的开始,注意gValid仍然不是true,输入try语句,读取行gChoice += tScan.nextInt();,但不暂停以供用户输入,失败从tScan分配gChoice一个整数,进入catch语句,依此类推。

对于我可能做错了什么或如何避免该问题的任何建议,我将不胜感激。

编辑:现在解决了,感谢格雷格。

最佳答案

您需要清除扫描仪的错误输入。尝试将tScan.next();添加到catch块。

10-01 20:34