扫描程序在循环try / catch中失败

时间:2013-10-02 22:52:51

标签: java java.util.scanner

我想读取用户选择和输入的整数值,但如果用户输入错误并输入不可读的值,则不希望异常使程序崩溃。为此,我编写了一个包含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();但不暂停用户输入,无法从tScan为gChoice分配一个整数,继续执行catch语句,依此类推。

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

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

1 个答案:

答案 0 :(得分:1)

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