Вызов in.nextInt()
внутри блока catch
считывает плохой поток, оставленный первым вызовом in.nextInt()
в блоке try
.
Что вы можете сделать, это удалить .nextInt()
вызовов в блоке catch
:
boolean hasError = true;
while (hasError) {
try {
System.out.println("Hello! Please enter how many Students you have in your class: ");
classSize = in.nextInt();
hasError = false;
} catch (InputMismatchException e) {
System.out.println("Invalid input. please make sure you enter numbers ONLY! No symbols or letters.");
// variable has error remains true
}
}
Или лучше:
Поскольку InputMismatchException
является подклассом RuntimeException
, тип ошибки, которая вызывает эту ошибку, может бытьотфильтровано по if
заявлениям.Поскольку вам нужно только правильное целое число в качестве входных данных, вы можете проверить правильность ввода, используя регулярное выражение.
boolean hasError = true;
String integerRegex = "[\\d]+"; // it means 1-to-many digits
while (hasError) {
System.out.println("Hello! Please enter how many Students you have in your class: ");
String input = in.nextLine();
if (input.matches(integerRegex)) {
classSize = Integer.parseInt(input);
hasError = false;
} else {
System.out.println("Invalid input. please make sure you enter numbers ONLY! No symbols or letters.");
// variable hasError remains true
}
}