Я лично предпочитаю использовать while l oop для такого рода вещей, чем do / while . Не то, чтобы с do / while было что-то не так, я просто чувствую, что лучше использовать , а l oop.
Я согласен с другими здесь, принимаю строковые цифры от пользователя вместо целого числа. По моему мнению, это избавит вас от возможных проблем в будущем, и вам не нужно целенаправленно применять механизм try / catch , если пользователь предоставит неверную запись. Это также позволяет вам легко применить механизм для выхода приложения, которое, опять же ИМХО, должно быть доступно для всех консольных приложений.
У вас есть ответ для выполнения задачи используя do / while l oop, но я хотел бы показать вам другой способ сделать это:
Scanner in = new Scanner(System.in);
String ls = System.lineSeparator();
int numberOfPlayers = 0;
String userInput = "";
while (userInput.equals("")) {
// The Prompt to User...
System.out.print("How many players would like to participate in this game?" + ls
+ "2 to 4 players only (q to quit): --> ");
userInput = in.nextLine();
// Did the User enter: q, quit (regardless of letter case)
if (userInput.toLowerCase().charAt(0) == 'q') {
// No, the User didn't...
System.out.println(ls + "Quiting Game - Bye Bye.");
System.exit(0); // Close (exit) the application.
}
/* Did the User supply a string representation of a numerical
digit consiting of either 2, 3, or 4. */
if (!userInput.matches("[234]")) {
// No, the User didn't...
System.out.println("Invalid input! You must supply a number from 2 to 4 "
+ "(inclusive)." + ls + "Try again..." + ls);
userInput = "";
continue; // Loop again.
}
// Convert numerical string digit to an Ingeger value.
numberOfPlayers = Integer.parseInt(userInput);
}
System.out.println(ls + "The Number of players you provided is: --> "
+ numberOfPlayers);
Вы заметите, что Scanner # Метод nextLine () используется для приема ввода пользователя в виде строки. Теперь это означает, что нам нужно проверить тот факт, что этот пользователь предоставил строковое представление целочисленного числа di git (от 2 до 4 включительно). Для этого вы заметите, что я использовал метод String # match () вместе с небольшим Regular Expression (RegEx), который состоит из следующей строки: "[234]"
. Что это делает в сочетании с методом String # match () , так это то, что он проверяет, содержит ли строковое значение в переменной userInput одну "2", одну "3" ", или один" 4 ". Все остальное, кроме одной из этих трех цифр, будет отображать это сообщение:
Invalid input! You must supply a number from 2 to 4 (inclusive).
Try again...
и заставить пользователя сделать еще одну запись.