Parsowanie + wyjątki + scanner

0

Witam, przygodę z Javą rozpocząłem całkiem niedawno, więc będę wdzięczny za wszelkie wskazówki.

Mam pewien problem, a w zasadzie wątpliwość związaną z parsowaniem i obsługą wyjątków. Kod wygląda następująco:

import java.util.Scanner;
import java.lang.Integer;

public class Test {

	public static int parsowanieInt(text) {
		
		int liczba = 0;
		boolean poprawnosc = false;
		
		while (!poprawnosc) {
			try {
				liczba = Integer.parseInt(text);
				poprawnosc = true;
			} catch (NumberFormatException e) {
				System.out.print("Podaj liczbę całkowitą! ");
			}
		}
		return liczba;
	}
	
	public static void main(String[] args) {
		
		int licznik = 1;
		Pracownik[] Pracownik = new Pracownik[licznik];
		
		Scanner in = new Scanner(System.in);
		for (int i  =0; i < licznik; i++) {
			Pracownik[i] = new Pracownik();
			System.out.print("Podaj imię "+(i+1)+" pracownika: ");
			Pracownik[i].imie = in.nextLine();
			System.out.print("Podaj nazwisko "+(i+1)+" pracownika: ");
			Pracownik[i].nazwisko = in.nextLine();
			System.out.print("Podaj wiek "+(i+1)+" pracownika: ");
			Pracownik[i].wiek = parsowanieInt(in.nextLine());
		}
		in.close();
		for (int i  =0; i < licznik; i++) {
			System.out.println(Pracownik[i].imie);
			System.out.println(Pracownik[i].nazwisko);
			System.out.println(Pracownik[i].wiek);
		}
	}
}

Kiedy jako wiek pracownika podam poprawną wartość, program zadziała poprawnie. Jeśli jednak podana wartość wywoła błąd NumberFormatException, program zapętli się wypluwając komunikat przewidziany w catch do obsługi rzeczonego wyjątku.

Udało mi się to ominąć modyfikując metodę parsowanieInt następujący sposób:

public static int parsowanieInt() {
		
		int liczba = 0;
		boolean poprawnosc = false;
		
		Scanner in = new Scanner(System.in);
		while (!poprawnosc) {
			try {
				liczba = Integer.parseInt(in.nextLine());
				poprawnosc = true;
			} catch (NumberFormatException e) {
				System.out.print("Podaj liczbę całkowitą! ");
			}
		}
		in.close();
		return liczba;
	}

Chciałbym jednak prosić o wyjaśnienie, czemu pierwszy sposób nie działa w założony sposób.

1

Przecież w pierwszej wersji parsujesz w kółko tego samego Stringa, a w drugiej wczytujesz za każdym razem nowego.

0

Boższ, ale jestem sierotą. Dziękuję :)

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