1

我想读取用户选择和输入的整数值,但不希望在用户犯错并输入不可读值时出现异常使程序崩溃。为此,我编写了一个包含 try/catch 序列的 while 循环,该序列旨在在出现无效条目时返回一个简短的语句,解释用户的错误并提示重试。

当我用这段代码运行程序时,虽然我用来读取用户输入的 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 仍然不为真,进入 try 语句,读取该行gChoice += tScan.nextInt();但不暂停用户输入,分配 gChoice 失败来自 tScan 的整数,继续执行 catch 语句,依此类推。

对于我可能做错了什么或如何避免这个问题,我将不胜感激。

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

4

1 回答 1

1

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

于 2013-10-02T22:58:48.680 回答