2

整数フィールドに非整数を入力するのに問題があります。他の人が私のプログラムを使用/作業した場合に、これを取得しないように予防策を講じているだけですInputMismatchException

input変数に数字以外の文字を入力すると、上記のエラーが発生します。NullPointerException文字列に関しては、これを補う方法はありますか?

このコードは、問題の原因となっている関連部分を含めるためだけに編集されています。

import java.util.Scanner;

class MyWorld {

public static void main(String[] args) {

   Scanner user_input = new Scanner(System.in);

   int input = 0;   

   System.out.println("What is your age? : ");
   input = user_input.nextInt();
   System.out.println("You are: " +input+ " years old");

  }

}
4

5 に答える 5

2

if ステートメントを使用して、 user_input かどうかを確認できますhasNextInt()。入力が整数の場合、 にinput等しく設定しuser_input.nextInt()ます。それ以外の場合は、入力が無効であることを示すメッセージを表示します。これにより、例外が防止されます。

System.out.println("What is your age? : ");
if(user_input.hasNextInt()) {
    input = user_input.nextInt();
}
else {
    System.out.println("That is not an integer.");
}

JavadocshasNextInt()からの詳細情報を次に示します。

ちなみに、Java の変数名はlowerMixedCase規則に従う必要があります。たとえば、user_inputに変更する必要がありますuserInput

于 2015-08-27T21:31:08.277 に答える
0

これは try-catch ブロックです。プログラムフローを停止させないようにしたい場合は、これを使用する必要があります。

try { 
  input = user_input.nextInt();
}
catch (InputMismatchException exception) { //here you can catch that exception, so program will not stop
  System.out.println("Integers only, please."); //this is a comment
  scanner.nextLine(); //gives a possibility to try giving an input again
}
于 2015-08-27T21:11:52.640 に答える
0

try-catchブロックを追加できます:

import java.util.Scanner;

class MyWorld {

public static void main(String[] args) {

   Scanner user_input = new Scanner(System.in);

   int input = 0;   

   System.out.println("What is your age? : ");

   try{
       input = user_input.nextInt();
   }catch(InputMisMatchException ex)
       System.out.println("An error ocurred");
   }

   System.out.println("You are: " +input+ " years old");

  }
}

ユーザーに別の入力を提供したい場合はint、ブール変数を作成し、do-whileそれを繰り返すループを作成できます。次のように:

boolean end = false;

//code

do
{
   try{
       input = user_input.nextInt();
       end = true;
   }catch(InputMisMatchException ex)
       System.out.println("An error ocurred");
       end = false;
       System.out.println("Try again");
       input.nextLine();
   }
}while(end == false);
于 2015-08-27T21:12:04.717 に答える
0

を使用してテストしhasNextInt()ます。

Scanner user_input = new Scanner(System.in);
System.out.println("What is your age?");
if (user_input.hasNextInt()) {
    int input = user_input.nextInt();
    System.out.println("You are " + input + " years old");
} else {
    System.out.println("You are a baby");
}
于 2015-08-27T21:28:44.420 に答える
-1

Scanner's next()nextInt() を使用する代わりにメソッドを使用してデータを取得します。次に、それが int でない場合はint input = Integer.parseInt(inputString); parseInt() メソッドを使用して整数に解析します。これは、それに応じて処理できます。NumberFormatException

于 2015-08-27T21:12:34.057 に答える