У вас есть много дополнительных звонков на next()
и nextInt()
в вашем коде. Вы можете преобразовать свой код в цикл do-while
. Также у вас есть дополнительный звонок на next()
в первом if
. Затем в вашем внутреннем else
вы запрашиваете пользовательский ввод для nextInt()
, но так как вы вызываете nextInt()
в начале цикла, это дополнительный, поэтому он запрашивает ввод дважды. Также в вашем первом if
он обрабатывает, если ввод не является синтаксическим анализом int. Если это не так, у вас есть value = input.nextInt()
, что приведет к исключению несоответствия ввода. Вместо этого вызовите пробел next()
, чтобы очистить неправильный ввод:
public static int collectInteger(String purpose, int minimum, int maximum) {
Scanner input = new Scanner(System.in);
System.out.println(purpose);
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
int value;
do {
if(!input.hasNextInt()) {
System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
input.next(); //clear bad input
}
else {
value = input.nextInt();
if(value >= minimum && value <= maximum) {
return value;
}
else {
System.out.println("The value you enter needs to be between " + minimum + " and " + maximum + ". Please try again.");
System.out.printf("\tEnter an integer between " + minimum + " and " + maximum + ": ");
}
}
} while(input.hasNext());
return 0;
}
Пример вывода:
Enter the number of cats.
Enter an integer between 0 and 100: -51
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: 20000
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: Hello
The value you enter needs to be between 0 and 100. Please try again.
Enter an integer between 0 and 100: 4
Your number of cats was 4.