web-dev-qa-db-ja.com

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");

     }
 }    
6
John Stef

代わりに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を1か所で処理できます。

8
Siyu Song

doc から

Scanner.nextInt入力の次のトークンをintとしてスキャンします。次のトークンが整数の正規表現と一致しない場合、または範囲外の場合

したがって、入力として整数を入力していないようです。

あなたが使用することができます

     while (students <= 0) {

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

            students = input1.nextInt();

         }

         catch (InputMismatchException e) {
             input1.nextLine();
         }
     } 
2
stinepike