Повторное введение числа в Scanner. Почему при двух блоках try/catch, программа позволяет вводить значения до выполнения условия, а при одном выдает Е
public class Loop1 {
public static void main(String[] args) throws Exception {
Loop1 l1 = new Loop1();
l1.scanner();
}
public void scanner() throws Exception {
Scanner scan = new Scanner(System.in);
System.out.println("Введите число: ");
long x = 0;
while (x == 0) {
try {
x = scan.nextLong();
} catch (Exception e) {
System.out.println("Повтори попытку: ");
try {
Scanner scan1 = new Scanner(System.in);
x = scan1.nextLong();
} catch (Exception e1) {
System.out.println("Ты мне надоел.");
}
}
}
System.out.println(x);
}
}
Ответы (1 шт):
Автор решения: стасевич
→ Ссылка
зачем пробрасывать исключение throws Exception, если оно обрабатывается в методе??
зачем вложенность try в try ??
а теперь по делу.
nextLong(); cчитывает число, и когда ты вводишь число и нажимаешь enter число записывается, а перевод строки "\n" остаётся(или возврат каретки, уже точно не помню).
поэтому используй метод next либо nextLine и так как эти методы возвращают строку, а у тебя long, надо парсить. и менять x = scan.nextLong(); на
x = Long.parseLong(scan.nextLine());
x = Long.parseLong(scan1.nextLine());
или
x = Long.parseLong(scan.next());
x = Long.parseLong(scan1.next());