Существует несколько способов достижения этого:
Сначала необходимо перехватить исключение, выданное Scanner
, и пометить цикл, чтобы он продолжался при обнаружении исключения. Это не является хорошей практикой , поскольку исключение, выданное Scanner
, InputMismatchException
, является непроверенным исключением. Значение причины этого исключения может быть легко обнаружено с помощью оператора if / else.
В вашем случае вы должны попытаться получить входные данные как String
, а затем проверить правильность ввода, если оно выглядит как число:
Подход с циклом на символ:
String string = scanner.nextLine();
for (int i = 0; i < string; i++) {
char ch = string.charAt(i);
if (!Character.isDigit(ch)) {
System.out.println("Input is not a number");
break; // stop the for-loop
}
}
int input = Integer.parseInt(string);
Подход RegEx:
String numericRegex = "[0-9]+";
String string = scanner.nextLine();
if (!string.matches(numericRegex)) {
System.out.println("Input is not a number");
}
int input = Integer.parseInt(string);
Это популярный подход кваша проблема, теперь вам решать, как вы будете управлять своими циклами, чтобы они повторялись при обнаружении неверного ввода.