我想读取用户选择和输入的整数值,但不希望在用户犯错并输入不可读值时出现异常使程序崩溃。为此,我编写了一个包含 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 语句,依此类推。
对于我可能做错了什么或如何避免这个问题,我将不胜感激。
编辑:现在解决了,感谢格雷格。