Wyjątek InputMismatchException nie działa prawidłowo

0

Witam.

Mam pewien problem z wyjątkiem InputMismatchException.
Gdy wpisze literka a w moim programie, to wywoływana jest wówczas metoda TEST, w której podajemy nr, jeśli podamy liczbę to wypisuje na ekran ta liczbę, a jeśli nie to wyrzuca błąd w postaci komunikatu. Wszystko ładnie działa ale tylko za 1 razem... Gdy ponownie wpiszę literkę a nie mam możliwości ponownie podać nr tylko od razu wyskakuje mi błąd w postacie w/w komunikatu. I teraz pytanko czy tak ma być, bo ten wyjątek tak działa, czy coś u mnie jest nie tak? Jeśli ten wyjątek tak działa, to czy jest możliwość rozwiązania tego problemu?
Kod:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.InputMismatchException;
import java.util.Scanner;

class TEST
{
	static public Scanner input=new Scanner(System.in);
	
	static void Wypisz()
	{
		int nr;
		try 
        {
			
			nr=input.nextInt();
	
			System.out.println("Twój nr to :"+nr);
				
        }
        catch(InputMismatchException obj)
        {
        	System.out.println("Podałeś tekst zamiast liczby");
        }
	}
}
public class Plik_do_testow 
{
	public static void main(String[] args) throws IOException
	{
			
		
			InputStreamReader isr = new InputStreamReader(System.in);
		    BufferedReader br = new BufferedReader(isr);
		   
		   
		    char n;
		    System.out.println("jesli chcesz podac nr wpisz a i nacisnij enter, x-wyjscie");       
		    
		    do 
		    {
		    	n=(char)br.read();
		        if(n=='a')
		        {
		        		System.out.println("Podaj nr");
		                TEST.Wypisz();
		              
		        }
		                    
		    } while (n!= 'x');
	}
}

Pozdrawiam Mateusz

0

To co możesz zrobić, to wczytać "String" i potem wykonać Integer.ParseInt(), on jeżeli nie da się zparsować string'a na liczbę dziesiętną rzuci Ci wyjątkiem.

0

@Złoty młot, nie czyścisz bufor klawiatury

        catch(InputMismatchException obj)
        {
            System.out.println("Podałeś tekst zamiast liczby");
            input.next(); //tego brakowało
        }

Drugie rozwiązanie podał @Biały szczur, zamień

        try 
        { 
            nr=input.nextInt();
            System.out.println("Twój nr to: "+nr);
        }
        catch(InputMismatchException obj)
        {
            System.out.println("Podałeś tekst zamiast liczby");
        }

na

        try 
        {
            nr=Integer.parseInt(input.next());
            System.out.println("Twój nr to: "+nr); 
        }
        catch(NormatFormatException obj)
        {
            System.out.println("Podałeś tekst zamiast liczby");
        }

Metoda next() zawsze pobiera coś z bufora klawiatury, metoda nextInt() pobiera tylko wtedy gdy w buforze jest poprawna liczba.

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