2013-05-29 70 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()。 –