Java getter/setter funktioniert nicht!

Basti46

Mitglied
Hallo Leute, ich sitze gerade an der Hausaufgabe und komme nicht so recht weiter. Ich bin gerade dabei mit setter/getter Methoden zu arbeiten. In der Hausaufgabe wird verlangt, dass ich endweder einen para.Konstruktor oder eine setter Methode verwende um mein "Datum Objekt" zu initialisieren, doch ich komme hier nicht so recht weiter. Schaut euch bitte meine Code an und sagt mir wie ich es am ende schaffe mein student1.getGeburtstag ausgeben zu lassen. Wenn Fragen kommen kann ich auch die komplette Aufgabenstellung posten.
Java:
public class Student {

	private int matrikelnr;
	Datum geburtstag=new Datum();
	Datum studienbeginn=new Datum();
	//Get
	public int getMatrikelnr(){return matrikelnr;}
	public Datum getGeburtstag(){return geburtstag;}
	public Datum Studienbeginn(){return studienbeginn;}
	//Set
	public void setMatrikelnr(int matrikelnr) {this.matrikelnr = matrikelnr;}
	public void setGeburtstag(int Tag,int Monat,int Jahr){this.geburtstag=geburtstag;}//Dies ist die Problemzeile
	public void setStudienbeginn(int Tag,int Monat,int Jahr){this.studienbeginn=studienbeginn;}//Hierebenso
}
public class Datum {
	private int tag;
	private int monat;
	private int jahr;
	//Get
	public int getTag(){return tag;}
	public int getMonat(){return monat;}
	public int getJahr(){return jahr;}
	//Set
	public void setTag(int tag){this.tag=tag;}
	public void setMonat(int monat){this.monat=monat;}
	public void setJahr(int jahr){this.jahr=jahr;}
}
public class TestStudent {
	public static void main(String[] argh){
		
		Student student1=new Student();
		student1.setMatrikelnr(123456);
		student1.setGeburtstag(1,1,1990);
		student1.setStudienbeginn(1,2,1998);
		
		Student student2=new Student();
		student2.setMatrikelnr(123457);
		student2.setGeburtstag(1,1,1990);
		student2.setStudienbeginn(1,2,1990);
		
		System.out.println("Matrikelnr."+student1.getMatrikelnr()+"wurde"+student1.getGeburtstag+" immatrikuliert.");
		
	}

}
 
public void setGeburtstag(int Tag,int Monat,int Jahr){this.geburtstag=geburtstag;}//Dies ist die Problemzeile
Das kann ja auch nicht funktionieren 🙂 Du übergibst drei int-Werte und willst dann Deiner Instanzvariable "geburtstag" zuweisen - woher?

Wenn dann müsstest Du's z. B. so machen:
Java:
public void setGeburtstag(int tag,int monat,int jahr){
      this.geburtstag.setTag(tag);
      this.geburtstag.setMonat(monat);
      this.geburtstag.setJahr(jahr);
}
 
Java:
public void setGeburtstag(int tag,int monat,int jahr){
      this.geburtstag.setTag(tag);
      this.geburtstag.setMonat(monat);
      this.geburtstag.setJahr(jahr);
}
Erstmal Danke für deinen Tipp Eclipse meckert jetzt aufjeden Fall nicht mehr rum! Ich wollte nun die Daten füt student1 ausgeben mit student1.getGeburtstag() doch dann Spuckt mir die Konsole nur
Java:
.System.out.println("Matrikelnr. "+student1.getMatrikelnr()+" wurde "+student1.getGeburtstag()+" immatrikuliert.");
//Matrikelnr. 123456 wurde Datum@1648ff68 immatrikuliert
aus
Was hab ich falsch gemacht?;(
 
Du musst die toString()-Methode überschreiben in "Datum".
Wow Danke! Ich hab zwar nich ganz verstanden warum es aufeinmal geht aber naja was solls.Nach ein wenig recherche im Internet hab ich herausgefunden wie ich die toString methode einsetze. Noch eine letzte Frage. Wie ich schaff ich es, dass nur das Jahr ausgeben wird auf der Konsole?(Ist von der Aufgabenstellung gefordert)
Java:
public class TestStudent {
	public static void main(String[] argh){
		Datum geburtstag=new Datum();	
		Student student1=new Student();
		
		student1.setMatrikelnr(123456);
		student1.setGeburtstag(1,2,1974);
		student1.setStudienbeginn(1,5,1995);
		
		Student student2=new Student();

		student2.setMatrikelnr(123455);
		student2.setGeburtstag(12,3,1974);
		student2.setStudienbeginn(23,4,1996);

		
		System.out.println("Matrikelnr. "+student1.getMatrikelnr()+" wurde "+student1.getStudienbeginn()+" immatrikuliert.");
		System.out.println("Matrikelnr. "+student2.getMatrikelnr()+" wurde "+student2.getStudienbeginn()+" immatrikuliert.");
		
	}

}
 
Die toString Methode erbst Du. Sie ist eine Methode von Object, der grundlegensten Klasse.
Diese toString weiss aber noch nicht was sie machen soll, desshalb gibt sie einfach die Adresse des Objektes zurück (dieses @irgendwas). Durch das Überschreiben der toString hast Du festgelegt, was und wie der String erzeugt werden soll.
Die Methode toString wird übrigens von z.B. System.out.println aufgerufen.

Wenn ich Deine Frage richtig verstehe, handelt es sich jetzt wieder um die Ausgabe des Datums.
Du müsstest nur das Jahr als String zurückgeben.

Java:
	public String toString() {
		return "" + this.geburtstag.getJahr();
	}

Pentalon
 
Wie ich schaff ich es, dass nur das Jahr ausgeben wird auf der Konsole?

System.out.println("Matrikelnr. "+student1.getMatrikelnr()+" wurde "+student1.getStudienbeginn()+" immatrikuliert.");
du gibts das ganze datum aus... gibt halt das jahr aus...

System.out.println("Matrikelnr. "+student1.getMatrikelnr()+" wurde "+student1.getStudienbeginn().getJahr()+"

Auf welche Hochschule gehst du? Würd mich nur interessieren...
 

Zurück
Oben