Как в условии цикла уместить проверку на тип переменной и проверку по значению
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)
Ответы (2 шт):
Автор решения: Алексей Р
→ Ссылка
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
Автор решения: Nowhere Man
→ Ссылка
В сканере можно использовать метод 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
---