Консолидация с проверкой нескольких входных данных Java
Когда я получаю данные от пользователя, я хочу убедиться, что они оба:
- число
- больше минимального значения
Я написал следующий код для достижения этой цели, но он кажется более запутанным, чем должен быть. Есть ли способ объединить вопрос, является ли введенное число и является ли это число меньше десяти, или какая-либо аналогичная проверка двух частей?
// 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.
Видите ли, хороший код можно легко прочитать и понять. Конечно, "меньше кода" часто читается быстрее, но иногда "немного больше" кода можно понять гораздо быстрее, чем более короткая версия!
Вы можете использовать || оператор короткого замыкания ИЛИ для объединения обеих проверок, как показано ниже:
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