7

Java の問題で友人を助けています。しかし、問題が発生しました。Java.Util.Scanner.nextInt() を使用してユーザーから番号を取得し、ユーザーが他に何かを与えるかどうかを継続的に尋ねます。唯一の問題は、エラー処理の方法がわからないことです。

私たちが試したこと:

do {
  int reloop = 0;
  try {
    number = nextInt(); 
  } catch (Exception e) {
    System.out.println ("Please enter a number!");
    reloop ++; 
  }
} while(reloop != 0);

唯一の問題は、数値ではないものを入力すると、これが無期限にループすることです。

何か助けはありますか?

4

2 に答える 2

16

を実行すると、が成功することhasNextInt()を確認するために使用できます。「ごみ」を飛ばしたい場合は、呼び出して破棄することもできます。ScannernextInt()nextLine()

したがって、次のようなものです。

Scanner sc = new Scanner(System.in);
while (!sc.hasNextInt()) {
   System.out.println("int, please!");
   sc.nextLine();
}
int num = sc.nextInt();
System.out.println("Thank you! (" + num + ")");

以下も参照してください。


コードの問題は、をチェックnextInt()する代わりに をスローするため、不必要に冗長なエラー処理に加えて、例外スローされたときに、問題のある入力を過ぎて進まないことです! そのため、無限ループが発生します。InputMismatchExceptionhasNextInt()Scanner

これを修正するために を呼び出して破棄することもできますが、代わりに上記nextLine()の例外のないhasNextInt()事前チェック手法を使用するとさらに効果的です。

于 2010-04-23T03:53:27.913 に答える
2

数値が int 以外の場合は例外が発生し、そうでない場合は reloop が 1 になり、ループが終了します

  int reloop = 0;
  do {
   try {
        number = nextInt();
        reloop ++; 
  } catch (Exception e) {
       System.out.println ("Please enter a number!");
  }}
 while(reloop == 0);
于 2013-07-23T09:15:30.087 に答える