Повторное введение числа в 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());
→ Ссылка