Parsowanie String do Integer, nieoczekiwany wyjatek

0

Cześć, nie bardzo rozumiem dlaczego jedno parsowanie Stringa na Integera nie przechodzi (zglaszany jest wyjatek), a przy dodatniu wyjscia na konsole (System.out.println), nie jest zglaszany wyjatek. Bardzo bym prosil o wyjasnienie lub odesłanie do lektury ;)

Kod zglasza wyjatek:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String a = br.readLine();
        Integer.parseInt(a);

        String b = br.readLine();
        Integer.parseInt(b);

        br.close();

Zgłaszany wyjatek:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""

Po dodaniu standardowego wyjscia program nie zglasza wyjatku

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String a = br.readLine();
        System.out.println(a);
        Integer.parseInt(a);

        String b = br.readLine();
        System.out.println(b);
        Integer.parseInt(b);

        br.close();

Co takiego dodanie "standardowego wyjścia" zmienia w "standardowym wejsciu"?

4

Te rzeczy które opisujesz to są dystrakcje, odciągają Cię od prawdziwego problemu.

W Twoim kodzie leci wyjątek, ponieważ w Twoim przypadku readLine() zwrócił "", czyli pusty string. Musisz po prostu oprogramować co ma się wtedy stać - najpewniej zrobić drugi readLine() w while'u

0

Nie bardzo właśnie rozumiem dlaczego w pierwszym readLine() parsowanie się udaję, a w drugim już nie. Totalnie nie mam pojęcia dlaczego dla drugiego readLine() program zwrocił pustego String'a. A jeśli dodam standardowe wyjście pomiędzy tak jak w drugim przykładzie kodu to już działa. Dane wejściowe dla pierwszego kodu, jak i drugiego sa identycznie:
np:
2
2

0
Conju89pl napisał(a):

Nie bardzo właśnie rozumiem dlaczego w pierwszym readLine() parsowanie się udaję, a w drugim już nie. Totalnie nie mam pojęcia dlaczego dla drugiego readLine() program zwrocił pustego String'a. A jeśli dodam standardowe wyjście pomiędzy tak jak w drugim przykładzie kodu to już działa. Dane wejściowe dla pierwszego kodu, jak i drugiego sa identycznie:
np:
2
2

Prawdopodobnie dlatego że readLine() jest blokujące, tzn "czeka" na input. Widocznie w pierwszym przypadku readLine() blokuje, czekając na dane, i do parsowania nie dochodzi. W drugim przypadku readLine() zwraca pusty string "", próbujesz go sparsować i leci wyjątek.

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