2016-10-26 17 views
1

これは入力を2倍にする単純なJava関数です。値が非数値の場合は、入力と最初のチェックが必要です。次に、値が0より大きいかどうかを確認します。Javaの非数値入力における無限ループ

私が直面しています問題は、私は非数値の入力を入力するたびに、それは無限ループを実行し、唯一"Enter a number greater or equal to 1.0: "

double getInput(double n) { 
    Scanner kbd = new Scanner(System.in); 
    boolean flag = false; 
    boolean check = false; 
    while (!flag) { 
     System.out.println("Enter a number greater or equal to 1.0: "); 
     try { 
      n = kbd.nextDouble(); 
      if (n >= 0 || n < 0) 
       check = true; 
     } catch (InputMismatchException ex) { 
      err.print("Invalid Data Type (not Numeric)"); 
     } 
     if (check == true) { 
      if (n < 0) 
       System.out.println("Invalid value (too small)"); 
      else 
       flag = true; 
     } 
    } 
    return n; 
} 

答えて

0

kbd.nextDoubleを印刷するこれらを繰り返し渡されるため、改行文字を消費しません。 whileループに追加します。

例外をスローするのではなく、キャッチブロックにkbd.nextLine()を渡すことで、次のループで入力メソッドが準備できるようにすることができます。ここで

catch(InputMismatchException ex) 
      { 

       System.out.println("Invalid Data Type (not Numeric)"); 
       kbd.nextLine(); 
      } 

あなたのための完全なコードです:

スキャナからdouble値を読み込み
double getInput(double n) 
    { 

     Scanner kbd = new Scanner(System.in); 
     boolean flag =false; 
     boolean check = false; 
     while(!flag) 
     { 
      System.out.println("Enter a number greater or equal to 1.0: "); 
      try 
      { 

       n = kbd.nextDouble(); 

       if(n>=0 || n<0)check = true; 
      } 
      **catch(InputMismatchException ex) 
      { 

       System.out.println("Invalid Data Type (not Numeric)"); 
       kbd.nextLine(); 
      }** 

      if(check==true) 
      { 
       if(n<0) 
       System.out.println("Invalid value (too small)"); 
       else 
        flag = true; 
      } 
     } 
    return n; 
    } 
+0

iは、正しい値が次回正しい入力を入力した場合でも、あなたのコードが動作イマイチので –

+0

に入るまでの入力をしたいですか? –

+0

正しい数字を入力した場合 –

0

文句を言わない

n = kbd.nextDouble(); 

行の末尾を読むので、スキャナ、オブジェクトが何かを持っていますあなたが行末を取得しない限り、読んでください

kbd.nextLine(); 
012まさにこれを行うには

ロジックポイント例外が来た後...

catch (InputMismatchException ex) { 
     System.err.print("Invalid Data Type (not Numeric)"); 
     kbd.nextLine(); ///here!!! 
     } 
関連する問題