Hallo Java Forum,
Ich will eine Methode schreiben, die mit Hilfe des heutigen Datums überprüft ob ein vom User angegebenes Geburtsdatum in der Zukunft liegt oder einen ungültigen Tag enthält.
Um zu überprüfen ob der Tag gültig ist hab ich folgende Methode, bei der aber aktuell jeder Tag einfach angenommen wird. Ich sehe aber iwie nicht wo mein Fehler liegt und ich hoffe, dass mir einer meinen Fehler zeigen kann:
Ich will eine Methode schreiben, die mit Hilfe des heutigen Datums überprüft ob ein vom User angegebenes Geburtsdatum in der Zukunft liegt oder einen ungültigen Tag enthält.
Um zu überprüfen ob der Tag gültig ist hab ich folgende Methode, bei der aber aktuell jeder Tag einfach angenommen wird. Ich sehe aber iwie nicht wo mein Fehler liegt und ich hoffe, dass mir einer meinen Fehler zeigen kann:
Java:
public static int requestBirthDay(Calendar rightNow, int birthYear, int birthMonth) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int d = 0;
System.out.println("Geburtstag eingeben");
try {
try {
d = Integer.parseInt(in.readLine());
if (!validateDay(d, rightNow, birthYear, birthMonth)) {
throw new IllegalDayException();
}
return d;
} catch (IllegalDayException ex) {
System.out.println("Bitte einen gültigen Tag eingeben");
ex.printStackTrace();
System.out.println("");
return requestBirthDay(rightNow, birthYear, birthMonth);
}
} catch (NumberFormatException | IOException e) {
System.out.println("Bitte eine Zahl eingeben");
e.printStackTrace();
System.out.println("");
return requestBirthDay(rightNow, birthYear, birthMonth);
}
}
public static boolean validateDay(int day, Calendar rightNow, int birthYear, int birthMonth) {
try {
if (rightNow.get(Calendar.MONTH) == birthMonth && rightNow.get(Calendar.DAY_OF_MONTH) < day) {
throw new IsFutureDateException("Tag liegt in der Zukunft");
}
} catch (IsFutureDateException ex) {
System.out.println("eingegebenes Datum liegt in der Zukunft, bitte neues Datum eingeben");
ex.printStackTrace();
System.out.println("");
return false;
}
if (day < 1 || day > 31) {
return false;
}
if ((birthMonth == 4 | birthMonth == 6 | birthMonth == 9 | birthMonth == 11) && day > 30) {
return false;
}
if (birthMonth == 2 && day == 29 && (birthYear % 4 != 0 && birthYear % 100 == 0)) {
return false;
} else {
return true;
}
}