Консолидация с проверкой нескольких входных данных 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

Другие вопросы по тегам