2012-07-11 56 views
3
String[] names=new String[4]; 
int[] scores=new int[4]; 
Scanner keyboard = new Scanner(System.in); 
System.out.println("Enter 4 strings and integers:"); 
for(int i=0;i<4;i++){ 
    names[i]=keyboard.nextLine(); 
    scores[i]= keyboard.nextInt(); 
} 

以上是我的简单程序,下面显示了弹出的异常。为什么在这个初级Java程序中得到InputMismatchException?

Enter 4 strings and integers: 
first 
1 
second 
Exception in thread "main" java.util.InputMismatchException 
    at java.util.Scanner.throwFor(Scanner.java:909) 
    at java.util.Scanner.next(Scanner.java:1530) 
    at java.util.Scanner.nextInt(Scanner.java:2160) 
    at java.util.Scanner.nextInt(Scanner.java:2119) 
    at Q2.main(Q2.java:15) 
Java Result: 1 

回答

10

nextInt不吞行的末尾,即保持在缓冲器中。因此,当您点击 输入,1被读入第一个score,则第二个name被设置为空字符串。

然后解析器试图将second解释为int,引发异常。

您需要在readInt之后丢弃当前行。

+0

你可以提出任何方便的方法来抛弃'readInt'后的当前行吗? – 2012-07-11 20:42:22

+0

提示:事实上,当你阅读第二个“名字”时,你已经在这么做:) – Mat 2012-07-11 20:44:07

+0

明白了。非常感谢你! – 2012-07-11 20:45:33