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.