我想读取用户选择和输入的整数值,但如果用户输入错误并输入不可读的值,则不希望异常使程序崩溃。为此,我编写了一个包含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语句,依此类推。
对于我可能做错了什么或者我怎么可以避免这个问题,我将不胜感激。
编辑:现在已经解决了,感谢格雷格。
答案 0 :(得分:1)
您需要清除扫描仪的错误输入。尝试将tScan.next();
添加到catch块。