如果用户意外输入错误的输入(字母),我希望程序一次又一次地循环,直到给出正确的输入,但是使用下面的代码我有一些错误。有什么想法吗?
catch (InputMismatchException e) {
input.nextLine();
while (!input.hasNextInt()) {
System.out.print("Enter the number of people in the circle: ");
numberOfPeople = input.nextInt();
}
}
错误输出:
Exception in thread "main" java.util.InputMismatchException at
java.util.Scanner.throwFor(Scanner.java:840) at
java.util.Scanner.next(Scanner.java:1461) at
java.util.Scanner.nextInt(Scanner.java:2091) at
java.util.Scanner.nextInt(Scanner.java:2050)
答案 0 :(得分:1)
请参阅the API:
由扫描程序抛出,表示检索到的令牌没有 匹配预期类型的模式,或者令牌不在 预期类型的范围。
这是因为它没有读取正确的类型。
我建议您使用Scanner#hasNextInt()并执行类似的操作(请注意,没有使用try-catch块):
if (input.hasNextInt()) {
numberOfPeople = scanner.nextInt();
}
else {
input.next();
continue;
}
为什么我们使用next()
?由于Java文档对Scanner所说的内容:
当扫描程序抛出InputMismatchException时,扫描程序不会 传递导致异常的令牌,以便可以检索它 或通过其他方法跳过。
答案 1 :(得分:0)
可以完成以下内容
for(int i=1;i<n;i++)
{
try
{
//code for taking the input from user
}
catch(InputMismatchException exception)
{
//Equivalently keeping the same value of i
--i;
}
}