2016-10-28 2 views
4

に私は、私はそれが両方であることを確認するには、ユーザからの入力を得る:複数の入力の検証の統合Javaの

  • 数を最小値よりも
  • 大きい

私は、次のコードを書きましたこれを達成するためには、それはされているよりも複雑なようです。 の質問を統合する方法はありますか?入力は数字で、その数字は10未満です、または同様の2つの部分の検証?

// function prompts user for a double greater than number passed in 
// continues to prompt user until they input a number greater than 
// the minimum number 
public static double getInput(double minimumInput) { 
    Scanner scan = new Scanner(System.in); 
    double userInput; 

    System.out.print("Enter a number greater than " + minimumInput + ": "); 
    while (!scan.hasNextDouble()){ 
     String garbage = scan.next(); 
     System.out.println("\nInvalid input.\n"); 
     System.out.print("Enter a number greater than " + minimumInput + ": "); 
    } // end while 

    userInput = scan.nextDouble(); 

    while (userInput <= minimumInput) { 
     System.out.println("\nInvalid input.\n"); 
     userInput = getInput(minimumInput); 
    } 

    return userInput; 
} // end getInput 

答えて

2

かんたん回答:ありません。

ご覧のとおり、ユーザーの入力は何でもかまいません。その "nextDouble()"メソッドを使用しない場合は、文字列を数値に変換する必要があります。しかし、Javaでは言うことができません:この事はダブルです、それは他の値よりも小さくする必要があります。

あなたは、その制約をコードに明示的に「置く」必要があります。そして、あなたが今持っているコードは、その視点では問題ありません。私は、それがすべてのテストを単一のif条件に入れることを試みる他の答えの中の提案よりも優れていると思う。

あなたが見ると、良いコードを読みやすく理解しやすいです。もちろん、「コードの少ないコード」は読みやすくなりますが、コードの「もう少し」が短いバージョンよりもはるかに早く理解できる場合があります。

+0

を、それが多すぎるので、私はあなたの答えの最後の部分を削除することをお勧めその知識レベルの人のための情報。 – talex

+0

そうでした。彼の質問の「スタイル」の側面にもっと焦点を合わせました。有効な提案、ありがとうございます! – GhostCat

+0

フィードバックいただきありがとうございます! –

0

||短いcircut以下のように両方の検証を統合するオペレータ:

public static double getInput(double minimumInput) { 
      Scanner scan = new Scanner(System.in); 
      double userInput =0; 
      System.out.print("Enter a number greater than " + minimumInput + ": "); 
      //Combine two vlidations using || operator 
      while (!scan.hasNextDouble() || ((userInput=scan.nextDouble()) < minimumInput)){ 
       System.out.println("\nInvalid input.\n"); 
       System.out.print("Enter a number greater than " + minimumInput + ": "); 
      } // end while 
      return userInput; 
     } // end getInput 

は、以下の演算子の詳細については、下記のリンクをご参照ください: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

+0

これは**間違った**方向に起こっていると思います。良いコーディングスタイルは約**可読性**です。従って:*理解しやすい*条件。そして驚くべきことに、NOTとORとメソッド呼び出しを使用するifと<は**理解しにくい**です。 – GhostCat

+0

フィードバックのおかげで、これは私が探していた_idea_でした。ただし、コードにエラーがあります。 minimumInputより小さい数値を入力した場合は正常に動作しますが、文字列を入力すると、パラメータ!scan.hasNextDoubleがfalseに評価され、スキャナをクリアしないため、コードが無限ループに入ります。その右)。あなたはその問題を解決する方法に関するアイデアはありますか? –