//while (test == false) { // Line #1
while (!test) { /* Better notation */ // Line #2
System.out.println("Integers only please"); // Line #3
test = input.hasNextInt(); // Line #4
} // Line #5
Проблема в том, что в строке # 4 выше input.hasNextInt()
проверяет только если вводится целое число и не запрашивает новое целое число. Если пользователь вводит что-то другое , чем целое число, hasNextInt()
возвращает false
, и вы не можете запросить nextInt()
, потому что тогда бросается InputMismatchException
, так как Scanner
все еще ожидает целое число.
Вы должны использовать next()
вместо nextInt()
:
while (!input.hasNextInt()) {
input.next();
// That will 'consume' the result, but doesn't use it.
}
int result = input.nextInt();
input.close();
return result;