当我收到用户的输入时,我想确保它们都是:
我编写了以下代码来实现这一目标,但它似乎比它必须更复杂。有没有办法整合问题输入数字是少于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
答案 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