2013-05-29 71 views
4

我有这样的代码,我想赶上字母例外,但它一直有这些错误:的Java InputMismatchException时

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) 
    at exercise_one.Exercise.main(Exercise.java:17) 

这里是我的代码:

System.out.print("Enter the number of students: "); 

students = input.nextInt(); 

while (students <= 0) { 

    try { 

     System.out.print("Enter the number of students: "); 

     students = input.nextInt(); 

    } 

    catch (InputMismatchException e) { 

     System.out.print("Enter the number of students"); 

    } 
}  
+0

第一个'students = input.nextInt();'不在'try'块中,而你输入的东西不能存储在'int'中。 – jlordo

+0

是的,似乎是这种情况,但我怎样才能同时检查(字母和负数除外)? –

+0

简单。只需删除您发布的前两行代码即可。 – jlordo

回答

6

您可以使用一个do-while循环,而不是消除第一input.nextInt()

do { 
    try { 
     System.out.print("Enter the number of students: "); 
     students = input.nextInt(); 
    } catch (InputMismatchException e) { 
     System.out.print("Invalid number of students. "); 
    } 
    input.nextLine(); // clears the buffer 
} while (students <= 0); 

因此,所有的InputMismatchException都可以在一个地方处理。

+0

这很好。只要记住先把你的学生变量初始化为0,否则在编译过程中你会得到一个“变量可能未被初始化”的错误 – JonathanScialpi

+2

正如所写,如果发生InputMismatchException,那么它将打印输入学生数EnterEnter学生人数:'。用'System.out.println(“输入无效,请输入一个数字来代替第二个打印可能是好的。“),所以用户知道他们已经做了他们不应该做的事情,所以你在提示和”错误信息“之间有一条线。 – Monkeygrinder

2

doc

Scanner.nextInt将输入的下一个标记扫描为int。如果 下一个标记不匹配的Integer正则表达式,或者超出范围

因此,看来你没有输入任何整数作为输入。

可以使用

 while (students <= 0) { 

     try { 
      System.out.print("Enter the number of students: "); 

      students = input1.nextInt(); 

     } 

     catch (InputMismatchException e) { 
      input1.nextLine(); 
     } 
    } 
+0

我已经将它声明为int –

+0

@JimDim ..对不起,您输入的不是整数.. – stinepike

+2

如果有人键入类似'abc'的字符串,或者输入的数字不能是用'int'表示,'nextInt()'方法会抛出异常。请参阅http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()。 –