循环许多字母输入

时间:2013-05-29 15:38:18

标签: java while-loop try-catch java.util.scanner

如果用户意外输入错误的输入(字母),我希望程序一次又一次地循环,直到给出正确的输入,但是使用下面的代码我有一些错误。有什么想法吗?

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)

2 个答案:

答案 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;
}

}