Ввод пользователем петли до тех пор, пока не будут выполнены условия

Мне нужно попросить пользователя ввести номер, который будет использоваться в качестве начала диапазона, а затем ввести другой номер, который является концом диапазона. Стартовый номер должен быть 0 или больше, а конечный номер не может превышать 1000. Оба числа должны быть делятся на 10. Я нашел способ удовлетворить эти условия, однако, если они не выполнены, моя программа просто сообщает пользователю, что их ввод был неправильным. Возможно ли, чтобы я закодировал его так, чтобы после ввода пользователем он проверил, чтобы убедиться, что условия выполнены, и если они не возвращаются назад и снова вводят их. Вот код, который у меня есть.

Scanner keyboard = new Scanner(System.in); int startr; int endr; System.out.println("Enter the Starting Number of the Range: "); startr=keyboard.nextInt(); if(startr%10==0&&startr>=0){ System.out.println("Enter the Ending Number of the Range: "); endr=keyboard.nextInt(); if(endr%10==0&&endr<=1000){ }else{ System.out.println("Numbers is not divisible by 10"); } }else{ System.out.println("Numbers is not divisible by 10"); } 

Легко с do-while:

 Scanner keyboard = new Scanner(System.in); int startr, endr; boolean good = false; do { System.out.println("Enter the Starting Number of the Range: "); startr = keyboard.nextInt(); if(startr % 10 == 0 && startr >= 0) good = true; else System.out.println("Numbers is not divisible by 10"); } while (!good); good = false; do { System.out.println("Enter the Ending Number of the Range: "); endr = keyboard.nextInt(); if(endr % 10 == 0 && endr <= 1000) good = true; else System.out.println("Numbers is not divisible by 10"); } while (!good); // do stuff 

Вы должны использовать некоторое время, что-то вроде:

 while conditionsMet is false // gather input and verify if user input valid then conditionsMet = true; end loop 

должен это сделать.

Универсальная процедура:

  1. Прочитайте ввод в бесконечном цикле.
  2. Используйте break; для выхода из цикла при выполнении условий.

Пример:

 Scanner keyboard = new Scanner(System.in); int startr, endr; for (;;) { System.out.println("Enter the starting number of the range: "); startr = keyboard.nextInt(); if (startr >= 0 && startr % 10 == 0) break; System.out.println("Number must be >= 0 and divisible by 10."); } for (;;) { System.out.println("Enter the ending number of the range: "); endr = keyboard.nextInt(); if (endr <= 1000 && endr % 10 == 0) break; System.out.println("Number must be <= 1000 and divisible by 10."); } 

Если после недопустимого ввода вы хотите отобразить только сообщение об ошибке, не повторяя начальное приглашение, переместите начальное приглашение прямо над / вне цикла.

Если у вас нет необходимости в отдельном сообщении об ошибке, вы можете повторно расположить код для использования цикла do-while, чтобы проверить условия, которые немного короче:

 Scanner keyboard = new Scanner(System.in); int startr, endr; do { System.out.println("Enter the starting number of the range."); System.out.println("Number must be >= 0 and divisible by 10: "); startr = keyboard.nextInt(); } while (!(startr >= 0 && startr % 10 == 0)); do { System.out.println("Enter the ending number of the range."); System.out.println("Number must be <= 1000 and divisible by 10: "); endr = keyboard.nextInt(); } while (!(endr <= 1000 && endr % 10 == 0)); 
  • Наследование Java - переопределение переменных экземпляра
  • Как один интерфейс может использоваться для различных фоновых задач андроида?
  • Вибрация с длительностью и узором
  • Вызов метода подclassа в Java
  • Как очистить кеш проекта в идее Intellij, например, Eclipse?
  • Сборщик мусора в Android
  • преобразование растрового изображения Java в байтовый массив
  • Как остановить Proguard от удаления параметров типа?
  • Как преобразовать массив байтов в строку и наоборот?
  • сортировка списка карт
  • String.replaceAll без RegEx
  • Давайте будем гением компьютера.