Это был бы один из вариантов. Вы просто несколько раз просите пользователя ввести значение по умолчанию, и если он выходит из строя несколько раз, вы возвращаете порт по умолчанию. Если входные данные, которые они предоставляют, не являются целыми числами, возникает исключение InputMismatchException, и мы сообщаем им, что оно неверно, тогда мы либо предпринимаем другую попытку, либо возвращаем значение по умолчанию.
Стоит отметить, что мы вызываем Scanner # next (), чтобы очистить основной кэш и удалить все существующие данные.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int port = askForPortOr(scanner, 8080, 0, 3);
System.out.println("port: " + port);
}
private static int askForPortOr(Scanner scanner, int defaultPort, int attempts, int maximumAttempts) {
try {
System.out.println("Please enter a port number (default 8080): ");
return scanner.nextInt();
} catch (InputMismatchException ime) {
scanner.next();
if (++attempts < maximumAttempts) {
System.out.println("Incorrect port, please try again...");
return askForPortOr(scanner, defaultPort, attempts, maximumAttempts);
}
return defaultPort;
}
}
Выход
Please enter a port number (default 8080):
808o
Incorrect port, please try again...
Please enter a port number (default 8080):
808o
Incorrect port, please try again...
Please enter a port number (default 8080):
808o
port: 8080