Zapętlenie sprawdzania wystąpienia wyjątku w Javie

0

Witam.
Usiłuję stworzyć fragment programu, który prosi użytkownika o liczbę.
W przypadku wprowadzenia liczby program powinien zakończyć działanie - w przypadku wprowadzenia błędnej wartości (np. litery) powinien wyświetlić komunikat "Wprowadzoną niepoprawną liczbę. Spróbuj ponownie" i poprosić o kolejne wprowadzenie liczby - aż do skutku, aż do momentu kiedy wprowadzona dana będzie liczbą.

        Scanner odczyt = new Scanner(System.in);
        
        int licznik = 0;
        int ilosc;
        
        System.out.println("Podaj liczbę danych");
        
        while(licznik != 1)
        {
            try {
                ilosc = odczyt.nextInt();
                licznik++;
            }
            catch (Exception e){
                System.out.println("Wprowadzoną niepoprawną liczbę. Spróbuj ponownie");
            }
            finally {}
            
            if (licznik==1) break;
        }

Jeżeli użytkownik wprowadzi liczbę - jest ok. Program kończy działanie. Jeśli jednak wprowadzi np. literę, program się zapętla wypisując komunikat "Wprowadzoną niepoprawną liczbę. Spróbuj ponownie" bez końca. Szczerze nie wiem skąd to zapętlenie.
Jak poprawić ten program, aby użytkownik musiał wpisywać daną aż do momentu poprawnego wprowadzenia liczby?

pozdrawiam :)

1
        Scanner odczyt;
 
        int licznik = 0;
        int ilosc;
        
        do
        {
           odczyt = new Scanner(System.in);
           System.out.println("Podaj liczbę danych");
            try {
                ilosc = odczyt.nextInt();
                licznik++;
            }
            catch (Exception e){
                System.out.println("Wprowadzoną niepoprawną liczbę. Spróbuj ponownie");
            }
            finally {}
 
            //if (licznik==1) break;
        } while(licznik !=1);

Poprawiłem tak na szybko.

2

Nie podoba mi się wielokrotne tworzenie obiektu typu Scanner. Przyczyną zapętlenia jest to, że metoda nextInt() próbuje odczytać liczbę - ponieważ nie ma liczby, to niczego nie czyta, w buforze klawiatury zostaje błędny tekst. I on jest czytany w nieskończoność. Są dwa rozwiązania:

        do
        {           
           System.out.println("Podaj liczbę danych");
            try {
                ilosc = odczyt.nextInt();
                licznik++;
            }
            catch (Exception e){
                System.out.println("Wprowadzoną niepoprawną liczbę. Spróbuj ponownie");
                odczyt.nextLine(); //wyczyszczenie bufora
            }
            finally {}
 
        } while(licznik !=1);
//...
        do
        {           
           System.out.println("Podaj liczbę danych");
            try {
                ilosc = Integer.parseInt(odczyt.nextLine()); //czytanie całej linii razem z Enterem
                licznik++;
            }
            catch (Exception e){
                System.out.println("Wprowadzoną niepoprawną liczbę. Spróbuj ponownie");
            }
            finally {}
 
        } while(licznik !=1);

1 użytkowników online, w tym zalogowanych: 0, gości: 1