多输入验证合并Java

时间:2016-10-28 17:24:46

标签: java validation input java.util.scanner consolidation

当我收到用户的输入时,我想确保它们都是:

  • 数字
  • 大于最小值

我编写了以下代码来实现这一目标,但它似乎比它必须更复杂。有没有办法整合问题输入数字是少于10的数字,还是任何类似的两部分验证?

// 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 个答案:

答案 0 :(得分:2)

简单回答:没有。

你看,用户输入可以是任何东西。如果您不使用“nextDouble()”方法,您的代码甚至必须将字符串转换为数字。但是在java中没有办法说:这个东西是双重的,它必须小于其他一些值。

您明确必须将该约束“放下”到代码中。从这个角度来看,你现在拥有的代码很好。我甚至认为它比其他答案中的提议更好,它试图将所有这些测试填充到单个if条件中。

您可以轻松阅读和理解好的代码。当然,“更少的代码”通常更快阅读,但有时“更多”的代码可以比更短的版本更快地理解!

答案 1 :(得分:0)

您可以使用|| short circut OR运算符,用于合并两个验证,如下所示:

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