Как в условии цикла уместить проверку на тип переменной и проверку по значению

Рейтинг: 1Ответов: 2Опубликовано: 22.03.2023
while (!sc.hasNextInt() || a > 5) {
    System.out.print("Ошибка. Введите а: ");
    sc.next();
}

Мне нужно, чтобы при вводе слова/нецелого числа/числа, больше 5 выводилась ошибка с повторным вводом до тех пор, пока не будет удовлетворяться условие в цикле. Но почему-то конкретно при вводе а > 5 не происходит ничего, а при вводе, например, слова, выдается исключение:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:943)
    at java.base/java.util.Scanner.next(Scanner.java:1598)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2263)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2217)
    at mineproject.Okno.main(Okno.java:8)

Ответы

▲ 0Принят

В сканере можно использовать метод Scanner::hasNext(String pattern), который удачно подходит для проверки ввода, описанной в задании, для чего достаточно описать шаблон для целых чисел в диапазоне [0; 5], соответственно, корректно введённые числа можно вычитывать при помощи Scanner::nextInt:

Scanner sc = new Scanner(System.in);
int i = 0;
System.out.println("Введите 5 чисел в диапазоне [0; 5]");
while (i++ < 5) {
    while (!sc.hasNext("[0-5]")) {
        System.out.println("Ошибка ввода: " + sc.next() + ", повторите ввод");
    }

    System.out.println("\nOK! " + sc.nextInt());
}
System.out.println("---");

Результаты теста:

Введите 5 чисел в диапазоне [0; 5]
11 Ошибка ввода: 11, повторите ввод
22 Ошибка ввода: 22, повторите ввод
aaa Ошибка ввода: aaa, повторите ввод
3.12 -Ошибка ввода: 3.12, повторите ввод
1 Ошибка ввода: -1, повторите ввод
0 
OK! 0
1 
OK! 1
2 
OK! 2
3 
OK! 3
4 
OK! 4
---
▲ 0
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a;
        while (true) {
            System.out.print("Введите а: ");
            if (sc.hasNextInt()){
                a = sc.nextInt();
                if (a<=5) break;
            } else sc.next();
            System.out.print("Ошибка!");
        }
        System.out.print("Вы ввели число " + a);
    }
}
Введите а: 15
Ошибка!Введите а: три
Ошибка!Введите а: 18.75
Ошибка!Введите а: 2
Вы ввели число 2