Как проверить введенные с клавиатуры данные с помощью Java.util.Scanner
недавно познал класс Scanner, и возник вопрос. Пишу программу в которой юзер вводит с клавиатуры число в диапазоне от 1 до 100. При этом надо произвести проверки - введено ли целое число, и в верном ли диапазоне оно введено. Написал следующий код, но он работает некорректно. Если я ввожу число вне диапазона, почему-то сразу не выводится сообщение о неверном вводе, а повторно надо ввести цифру. И если после этого ввести цифру в верном диапазоне, то все равно продолжается ввод с клавиатуры.
Scanner sc = new Scanner(System.in);
int enter;
System.out.println("Введите цифру от 1 до 100");
while (!sc.hasNextInt() || sc.nextInt() > 100 || sc.nextInt() < 1){
sc.nextLine();
System.out.println("Введены неверные данные, попробуйте еще");
}
enter = sc.nextInt();
System.out.println(enter);
Ответы (2 шт):
Проблема в том что в while вы два раза использовали метод nextInt(), то есть вы два раза прочитали значения с консоли. Мое решение вашей проблемы - break;
Scanner sc = new Scanner(System.in);
double enter;
System.out.println("Введите цифру от 1 до 100");
while(true) {
enter = sc.nextDouble();
if(!(enter < 100 && enter > 0 && enter == (int)enter))
System.out.println("Введены неверные данные, попробуйте еще");
else break;
}
//for work
int number = (int)enter;
System.out.println(number);
Если чуть подправить Ваш код и вывести в отдельный метод, вроде как все работает.
Scanner key = new Scanner(System.in);
int keyValide = keyValidation(key);
private static int keyValidation(Scanner key) {
int numberValidate;
System.out.println("Введите целое число от 1 до 100");
while (!key.hasNextInt() || (numberValidate = key.nextInt()) > 100 || numberValidate < 1) {
key.nextLine();
System.out.println("Введены неверные данные, попробуйте еще");
}
return numberValidate;
}
Еще счетчик попыток не помешал бы здесь.
