Java Objekte aus einer LinkedList ausgeben

MK1993

Ensign
Registriert
Feb. 2012
Beiträge
194
Hallo Forengemeinde,

Ich bin Elektrotechnikstudent und schreibe in den nächsten Tagen eine Informatikklausur. Soweit verstehe ich alles was mit Objekten, Arrays und LinkedLists zu tun hat.Nur bin ich irgendwie nicht in der Lage ein Objekt aus einer LinkedList auszugeben.

Die Aufgabe besteht darin einer Person vom Objekt Student einen Namen und eine Matrikelnummer zuzuweisen. Dann sollten zwei Objekte von Klausur erstellt werden, die jeweils einen Klausurkuerzel und eine Note beinhalten.
Diese Objekte sollten dann in eine LinkedList eingefügt werden. Dann erscheint eine Dialogbox in der etwas reingeschrieben werden kann/muss.
Wenn IN2 oder IN1 in der Dialogbox eingegeben wird soll die jeweilige Klausur mit dem klausurkuerzel ausgegeben werden. Wenn etwas ganz anderes reingeschrieben wurde, soll "Die Klausur wurde noch nicht geschrieben!" ausgegeben werden.

Ich hoffe auf eine hilfreiche Lösung.

Danke im vorraus! :)

Die Klasse Student:
Code:
package klausur;

public class Student 
{
	private String name;
	private String matrikelnummer;
	
	public Student(String name, String matrikelnummer)
	{
		this.name=name;
		this.matrikelnummer=matrikelnummer;
	}
	
	public String getName()
	{
		return name;
	}
	
	public String getMatrikelnummer()
	{
		return matrikelnummer;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}
	
	public String studentenInfos()
	{
		return "Name: "+getName()+"\tMatrikelnummer: "+getMatrikelnummer();
	}
}

Die Klasse Klausur:
Code:
package klausur;

public class Klausur 
{
	private String klausurkuerzel;
	private double note;
	
	public Klausur(String klausurkuerzel)
	{
		this.klausurkuerzel=klausurkuerzel;
	}
	
	public String getKlausurkuerzel()
	{
		return klausurkuerzel;
	}
	
	public void setKlausurkuerzel(String klausurkuerzel)
	{
		this.klausurkuerzel=klausurkuerzel;
	}
	
	protected double getNote()
	{
		return note;
	}
	
	protected void setNote(double note)
	{
		this.note=note;
	}
}

Die Klasse StudentKlausur:
Code:
package klausur;

import java.util.LinkedList;

public class StudentKlausur extends Student
{
	protected LinkedList<Klausur> klausurListe;
	
	public StudentKlausur(String name, String matrikelnummer)
	{
		super(name, matrikelnummer);
		klausurListe=new LinkedList<Klausur>();
	}
	
	public LinkedList<Klausur> getKlausur()
	{
		return klausurListe;
	}
	
	public void noteEinfuegen(String klausurkuerzel, double note)
	{
		Klausur k=new Klausur(klausurkuerzel);
		k.setNote(note);
		klausurListe.add(k);
	}
}

Die Klasse KlausurApp in der die Main Methode implementiert wurde:
Code:
package klausur;

import javax.swing.JOptionPane;

public class KlausurApp 
{
	public static void main(String args[])
	{
		String a;
		StudentKlausur sk=new StudentKlausur("Hans-Wurst","123456789");
		
		sk.noteEinfuegen("IN2", 1.7);
		sk.noteEinfuegen("IN1", 1.3);
		
		a=JOptionPane.showInputDialog("Geben Sie das Kürzel einer Klausur ein!");
		
		if(a.contains("IN2"))
		{
			Klausur k=sk.getKlausur().getFirst();
			System.out.println(k);
		}
		else if(a.contains("IN1"))
		{
			Klausur k=sk.getKlausur().getLast();
			System.out.println(k);
		}
		else
		{
			System.out.println("Diese Klausur wurde noch nicht geschrieben!");
		}
	}
}
 
Reine Stichwörter: Über Klausur-Liste iterieren (= Schleife), schauen ob Kürzel mit eingegebenem Kürzel übereinstimmt, Klausur als Ergebnis zurückliefern... wenn es kein Treffer gibt, dies in einer in der Vorlesung behandelten Form mitteilen (Exception?)

Aber ohne zu wissen, was ihr behandelt haben und was erlaubt ist, kann man kaum Tipps geben - was eigentlich ganz gut ist, denn das hier ist kein Hausaufgaben-Forum. Ich glaub dir ja, dass es dir um's Lernen geht, aber dann stellt sich die Frage: Wieso fragst du nicht Kommilitonen? Bist du der einzige, der die Prüfung hat?

In einem richtigen Programm würde man ziemlich sicher andere Datentypen nehmen.
 
Mir fällt gerade ein, dass ich vergessen habe zu schreiben, was ausgegeben wird.

Also ich bekomme immer so etwas als Ausgabe: klausur.Klausur@61579cd

Klar du hast recht man sollte kommilitonen fragen, aber erstens habe ich nicht so viel draht zu denen, zweitens mit denen ich eine draht habe sind faul, der eine hat seinen Studentenausweis vergessen, der andere macht sowieso nichts, und eine dritte person hat sich vergessen anzumelden, das ist alles bei der Info 1 klausur passiert und ich werde die Info 2 Klausur schreiben.

Das ist ja eigentlich Klar, wenn man die erste nicht bestanden/mitgeschrieben hat, dass man dann nicht für die zweite lernt.

Was wir in Info 2 gemacht haben ist folgendes: Grundlagen Onjektorientierung, Typkonvertierung, abstrakte klassen, datenstrukturen, Streams und der Rest ist Grafikkprogrammierung
 
Zuletzt bearbeitet:
Nie um eine Erklärung verlegen ;)

Aber es bleibt dabei: Ohne zu wissen, was wie ausgegeben werden soll, kann man keine konkreten Tipps geben. Das Iterieren mittels (for) Schleife wurde bereits genannt. Wenn die Standard-Ausgabe-Form eines Objektes nicht genügt, kann man diese durch Überschreiben der Methode #toString() beliebig anpassen.
 
Die Ausgabe ist doch schon fast richtig. Immer wenn ein @irgendwas ausgegeben wird, wird die toString Methode des zurückgegebenen Objektes ausgegeben.

Da deine Klausurklasse keine solche hat, gibts halt den Speicherbereich.

Deine Klausur Klasse hat aber andere Methoden, die String als Rückgabetyp besitzen. Rufe diese auf, für die gewünschten Informationen.
 
Die Ausgabe mag ja fast richtig sein, aber der Weg dort hin ist an programmatischem Unsinn kaum zu übertreffen... so war die Nutzung der Liste sicher nicht gemeint ...

Aber hey: If it compiles, ship it!

@e-Laurin: Nö. Naja er lässt sich das ausgeben, was toString() von Klausur zurücklliefert...
 
Zuletzt bearbeitet:
@SaxnPaule

Also sollte ich einfach die get Methoden benutzen (getName(), getMatrikelnummer, usw.) um die Daten auszugeben.

Aber dann stellt sich mir die Frage, wieso ich dann eine LinkedList erstellen soll.
 
Du musst zuerst auf das Objekt zugreifen mit Hilfe deiner Eingabe.
Wenn du das getan hast, kannst du die Einzelnen Werte innerhalb des Objekts mit den jeweiligen get-Methoden auslesen.
 
ok dann mache ich mal an die arbeit
 
MK1993 schrieb:
Aber dann stellt sich mir die Frage, wieso ich dann eine LinkedList erstellen soll.
Na überlege doch mal:
Ein Student schreibt 0 bis n Klausuren und erhält dementsprechend 0 bis n Noten. Man muss doch jetzt irgendwo speichern, welche Klausuren mit welchen Noten er geschrieben hat. Jetzt könnte man sagen: "Hey, nehme ich ein Array dafür!" Nein, das ist nicht optimal. Ein Array hat eine feste Größe, kann also nur eine begrenzte, vorher definierte Anzahl an Elementen aufnehmen. Eine Liste hingegen ist in der Größe variabel, ist also perfekt für diesen Job geeignet.

Ich persönlich hätte ja eine ArrayList oder eine HashMap statt einer LinkedList verwendet, aber mit einer LinkedList geht das auch.
 
HashMap hatten wir noch nicht, deshalb ist das aus dem Spiel.

Also so wie ich das jetzt ausgebe bekomme ich die Referenz des Objektes. Also muss ich das Objekt, das ich ausgeben möchte mit der toString() Methode in eine String casten!
 
Was willst du? :freak:

Ich ahne, was du meinst, aber du hast dich falsch ausgedrückt. Du willst einer Klasse eine toString()-Methode hinzufügen, damit man darüber ein paar relevante Informationen des Objekts ausgeben kann.
 
Die getXXX Methoden für die Ausgabe zu verwenden, halte ich für suboptimal. Überschreibe toString() so, dass die gewünschte Ausgabe erzielt wird. Dafür kannst Du entweder auf die entsprechenden get-Methoden oder gleich direkt auf die Felder zugreifen. Zur Ausgabe reicht dann ein
Code:
System.out.println(myobject);

Und das ist der Vorteil: man muss hier nicht jedes Mal wieder die verschiedenen Methoden für das gewünschte Format aufrufen, sondern es reicht schlicht das Objekt. Man spart also Code sollte die Ausgabe mehrmals erfolgen, was bei Dir der Fall ist (auch wenn das nicht der Fall sein müsste).
 
Also wenn ich in die Dialogbox "IN2" eingebe, dass in der Konsole "IN2 1.7" und bei eingabe von "IN1" "IN1 1.3" steht. Aber diese Informationen sollen aus der angegeben LinkedList entnommen werden.

@Soares: Wenn ich die Methode überschreibe bekomme ich Punktabzug, auf dem Zettel steht: Das hinzufügen von zusätzliche Attributen und Methoden kann zu Punktabzug führen.
 
Zuletzt bearbeitet:
Also wenn du nur die Note ausgeben willst müsstest du wenn ich richtig geschaut habe einfach das machen:

System.out.println(k.getNote())

Für die Klausur kannst auch den Wert so auslesen oder du verwendest den aus deiner eingabe und fügst ihn davor dann ein.
 
Ach mist, ich sehe gerade ich habe mich verlesen. Ich sollte nur die Note ausgeben.

Dann ändert sich der Code wie folgt:
Code:
if(a.contains("IN2"))
		{
			System.out.println(sk.getKlausur().getFirst().getNote());
		}
		else if(a.contains("IN1"))
		{
			System.out.println(sk.getKlausur().getLast().getNote());
		}
		else
		{
			System.out.println("Diese Klausur wurde noch nicht geschrieben!");
		}
 
Zuletzt bearbeitet:
e-Laurin schrieb:
Ich persönlich hätte ja eine ArrayList oder eine HashMap statt einer LinkedList verwendet, aber mit einer LinkedList geht das auch.
Nicht ohne Grund hab ich geschrieben, dass man in der Praxis andere Typen nehmen würde ...
 
Zurück
Oben