Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Die Aufgabe ist simpel.
Eine Klasse Person erstellen, diese besitzt Vor-Nachnamen und Geburtsdatum.
Main:
Java:
public static void main(String[] args) {
Person a1 = new Person("Joe","Wathda", 19, 3, 1990);
System.out.println(a1.Nachname);
}
Klasse Person:
Java:
public class Person {
String Vorname;
String Nachname;
Geburtstag Geburtstag;
public Person(String Vorname, String Nachname, int Tag, int Monat, int Jahr) {
this.Vorname = Vorname;
this.Nachname = Nachname;
this.Geburtstag.Tag = Tag;
this.Geburtstag.Monat = Monat;
this.Geburtstag.Jahr = Jahr;
}
}
Klasse Geburtstag:
Java:
public class Geburtstag {
int Tag;
int Monat;
int Jahr;
public Geburtstag (int tag, int monat, int jahr) throws InvalidDateException{
this.Jahr=jahr;
this.Monat=monat;
this.Tag=tag;
Überprüfung ob das Datum auch richtig sein kann.
}
}
Bekomme jedoch beim Ausführen einen NullPointerException, und zwar bei der Klasse Person in der Zeile:
Java:
this.Geburtstag.Tag = Tag;
Was habe ich übersehen, bzw. wie mache ich es richtig?
Danke im voraus!
Geburtstag geb1 = new Geburtstag (19,3,1998);
Person a1 = new Person ("Vorname", "Nachname", geb1);
War auch meine allererste Überlegung, jedoch muss das den so sein, geht das nicht alles irgendwie im PersonObjekt? Sonst müsste ich jedoch bei jeder neuen Person ein neues Geburtstagsobjekt erstellen?
public static void main(String[] args) throws InvalidDateException {
Person a1 = new Person("Joe","Wathda", 19, 3, 1990);
System.out.println(a1.Nachname);
System.out.println(a1.Geburtstag);
}
Java:
public class Person {
String Vorname;
String Nachname;
Geburtstag Geburtstag;
public Person(String Vorname, String Nachname, int Tag, int Monat, int Jahr) throws InvalidDateException {
this.Vorname = Vorname;
this.Nachname = Nachname;
Geburtstag geb = new Geburtstag(Tag, Monat,Jahr);
this.Geburtstag = geb;
}
}
Java:
public class Geburtstag {
int Tag;
int Monat;
int Jahr;
public Geburtstag (int tag, int monat, int jahr) throws InvalidDateException{
this.Jahr=jahr;
this.Monat=monat;
this.Tag=tag;
if (jahr<0){
throw new InvalidDateException (jahr + ": Jahr darf nicht negativ sein");
}
if (monat==1||monat==3||monat==5||monat==7||monat==8||monat==10||monat==12){
if (tag<1||tag>31){
throw new InvalidDateException (tag+ ": Tag muss zwischen 1 und 30 sein");
}
.
.
}
}
Leider bekomme ich nur die Adresse des a1.Geburtstags. Bei a1.Geburtstag.Tag erhalte ich jedoch den Tag.
Des Weiteren greift meine Überprüfung in der Klasse Geburtstag nicht mehr ein. Gebe ich als Tag zb den 122 ein, lässt es das Programm zu?
Dann sag mir doch bitte, mal, welche Zahlen hier zugelassen werden ;-)
Edit: Nach kurzem überlegen, ist mir nun auch klar was du mit "Adresse" des Geburtstags meinst: Class@hashcode
Überschreibe die toString Methode deiner Geburtstagsklasse so, dass der String etwas sinnvolles aussagt.