Подход, который вы хотите, - это прочитать любой вход (используя next()
на сканере), затем попытаться преобразовать его в int
и, наконец, отойти от l oop, если значение находится в указанном диапазоне.
Использование hasNextInt
вернет истину / ложь, что, как представляется, то, что вы хотите, но также важно, что "не продвигается дальше любого input. " Таким образом, если вы введете" s ", hasNextInt()
вернет false, ввод" s "останется неиспользованным, и каждый раз через l oop он будет снова вызывать hasNextInt()
(что снова верните false), et c.
Вот правка в вашем коде, показывающая, как сделать это правильно:
Scanner in = new Scanner(System.in);
do {
System.out.print("Input an integer number between 0 and 4 (inclusive): ");
try {
String next = in.next();
int n = Integer.parseInt(next);
if (n >= 0 && n <= 4) {
System.out.println("valid input: " + n);
break;
}
} catch (NumberFormatException e) {
// print a warning message if you want, "only integer values allowed"
}
} while (true);
Еще один способ заставить эту работу продолжить использование hasNextInt()
, но также: если результат ложный, добавьте код, который будет использовать любой токен, отличный от int
.