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语句会自动失败,而无需等待新的输入,这自然导致一系列错误消息和提示。
这是我的代码:
该程序在
对于我可能做错了什么或如何避免该问题的任何建议,我将不胜感激。
编辑:现在解决了,感谢格雷格。
(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