Hi,
Ich habe eine Klasse Karte, Mischmaschine und Ausführen.
Mit der Klasse Karte können neue Spielkarten erstellt werden, diese können dann in dem Objekt Mischmaschine in einer Arrayliste gespeichert werden. Das ganze führe ich in der Klasse Ausführen aus.
Ich erzeuge also in Ausführen ein Mischmaschine und füge immer neue Karten hinzu. Diese möchte ich nun mit Hilfe eines Interators ausgeben:
importjava.util.Iterator;publicclass test {Mischmaschine mischmaschine;publicstaticvoidmain(String[] args){Mischmaschine mischmaschine =newMischmaschine();
mischmaschine.add(newKarte("kreuz","ass"));
mischmaschine.add(newKarte("kreuz","koenig"));
mischmaschine.add(newKarte("kreuz","dame"));
mischmaschine.add(newKarte("kreuz","bube"));for(Iterator iter = mischmaschine.iterator(); iter.hasNext();){System.out.println(iter.next());}}
Nun hab ich zwei Probleme:
1. Neben mischmaschine.add(); erscheint die Meldung "Type safety: The method add(Object) belongs to the raw type ArrayList. References to generic type ArrayList<E> should be parameterized"
2. In der Ausgabe stehen die Typen und Werte nicht, sondern:
Nr3.Karte@111a3ac
Nr3.Karte@110b053
Nr3.Karte@a83b8a
Nr3.Karte@dd20f6
Dein Fehler liegt darin, dass die Klasse Mischmaschine von ArrayList ableitet. Du erstellst also eine ArrayList, der du Karten übergibst.
Was du allerdings haben möchtest ist, dass die ArrayList INNERHALB der Klasse Mischmaschine, also "kartenstapel", mit deinen Karten gefüllt wird. Das passiert nicht.
Für die Klasse Karte gilt, dass du hier die toString Methode von Object überschreiben musst, damit diese die Zeichenkette liefert, die du haben möchtest.
Übrigens wird die Klasse Test groß geschrieben. Du solltest darauf achten die einzelnen Variablen (unter anderem deine ArrayList) private zu halten und über Methoden darauf zugreifen.
Die Klasse Mischmaschine soll auch von Arraylist abgeleitet sein. Dann brauch ich in der Mischmaschine also keine neue Arraylist erstellen, sondern kann die Karten direkt in einer Mischmaschine speichern?
Aber wie kombiniere ich den Iterator mit eienr toString-Methode?
Verstehe. Nein du musst da keine ArrayList anlegen. Was du tun musst ist die extends ArrayList mit <Karte> ergänzen. Prinzipiel geht es auch ohne, aber Java sieht es nicht gerne, wenn kein Typ angegeben wird.
Du selbst musst gar nichts machen. Einfach die toString() Methode überschreiben, Program laufen lassen und staunen.
Aber ich soll die Mischmaschine mit dem Iterator durchlaufen. Eine toString-Methode ist doch was anderes?
Die toString-Methode gibt auch nur "Mischmaschine [karte=null]" aus.
Im for Konstrukt durchläufst du die Liste mit dem Iterator. Wenn du nun iter.next() aufrufst und die Rückgabe in einem println() ausgibst, wird die toString Methode bemüht, um das Objekt als eine Zeichenkette auszugeben. Die toString() Methode in Object gibt etwas zurück, dass etwa aussieht wie Karte@238974293 (hast du oben bereits gepostet).
Damit nun nicht der Zahlensalat ausgegeben wird, musst du die toString() Methode in der Klasse Karte überschreiben, sodass beim Auruf dieser Methode der Wert bzw. Typ bzw. Beides ausgegeben wird.
toString() wird implizit von Java aufgerufen und nicht von dir.
Die toString() Methode in der Klasse Karte könnte zum Beispiel so aussehen