Guten Morgen,
ich habe eine Klasse Tier und eine Klasse ArtenGehege erstellt. Die Klasse ArtenGehege beinhaltet eine HashSet, in der die Tiere durch eine Instanzmethode hinzugefügt werden können. Dies hat noch alles reibungslos funktioniert.
Nun soll eine Klasse "Zoo" implementiert werden, die über eine Map mit Strings als Keys und ArtenGehege-Objekten als Values verfügt. Die Klasse implementiert die Schnittstelle Iterable und soll nun über die Funktion iterator() verfügen.
Über den Iterator sollen sich nun die einzelnen ArtenGehege-Objekte in der Map zoo ausgeben lassen. In folgender Test-Klasse habe ich ein Zoo-Objekt erstellt und befüllt und anschließend mittels Iterator versucht, die in zoo gespeicherten Objekte zu erhalten:
Jedoch erhalte ich folgende Fehlermeldung:
Hier ist noch jeweils der Code von Zoo und EigenerIterator:
Nachdem ich jetzt vieles ausprobiert habe, habe ich keine Idee, wie ich dieses Problem lösen kann. Ich wäre sehr dankbar, wenn mir jemand weiterhilft.
Mit freundlichen Grüßen,
foxbird
ich habe eine Klasse Tier und eine Klasse ArtenGehege erstellt. Die Klasse ArtenGehege beinhaltet eine HashSet, in der die Tiere durch eine Instanzmethode hinzugefügt werden können. Dies hat noch alles reibungslos funktioniert.
Nun soll eine Klasse "Zoo" implementiert werden, die über eine Map mit Strings als Keys und ArtenGehege-Objekten als Values verfügt. Die Klasse implementiert die Schnittstelle Iterable und soll nun über die Funktion iterator() verfügen.
Über den Iterator sollen sich nun die einzelnen ArtenGehege-Objekte in der Map zoo ausgeben lassen. In folgender Test-Klasse habe ich ein Zoo-Objekt erstellt und befüllt und anschließend mittels Iterator versucht, die in zoo gespeicherten Objekte zu erhalten:
Java:
import java.util.Iterator;
public class TestZoo {
public static void main(String[] args) {
Zoo z= new Zoo();
ArtenGehege<Tier> g1 = new ArtenGehege<>();
Tier t1 = new Tier(55);
Tier t2 = new Tier(54);
Tier t3 = new Tier(56);
Tier t4 = new Tier(57);
Tier t5 = new Tier(58);
g1.einsperren(t1);
g1.einsperren(t2);
g1.einsperren(t3);
g1.einsperren(t4);
g1.einsperren(t5);
z.gehegeHinzufuegen("Gehege1", g1);
Iterator<ArtenGehege<Tier>> it = z.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
Jedoch erhalte ich folgende Fehlermeldung:
Exception in thread "main" java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')
at EigenerIterator.next(EigenerIterator.java:28)
at EigenerIterator.next(EigenerIterator.java:1)
at TestZoo.main(TestZoo.java:25)
Hier ist noch jeweils der Code von Zoo und EigenerIterator:
Java:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Zoo implements Iterable<ArtenGehege<Tier>> {
Map<String, ArtenGehege<Tier>> zoo = new HashMap<>();
public void gehegeHinzufuegen(String key, ArtenGehege<Tier> value) {
zoo.put(key, value);
}
@Override
public Iterator<ArtenGehege<Tier>> iterator() {
EigenerIterator it = new EigenerIterator(zoo);
return it;
}
}
Java:
import java.util.Iterator;
import java.util.Map;
public class EigenerIterator implements Iterator<ArtenGehege<Tier>> {
int zaehler = 0;
Map<String, ArtenGehege<Tier>> zoo;
ArtenGehege<Tier> ag;
public EigenerIterator(Map<String, ArtenGehege<Tier>> zoo) {
this.zoo=zoo;
}
@Override
public boolean hasNext() {
if (zaehler < zoo.size()) {
return true;
} else {
return false;
}
}
@Override
public ArtenGehege<Tier> next() {
//String-Array erstellen, das alle Keys der Map Zoo beinhaltet
String[] keyArray = (String[]) zoo.keySet().toArray();
//Value an entsprechender Stelle in ag speichern
ag = zoo.get(keyArray[zaehler]);
zaehler++;
return ag;
}
}
Nachdem ich jetzt vieles ausprobiert habe, habe ich keine Idee, wie ich dieses Problem lösen kann. Ich wäre sehr dankbar, wenn mir jemand weiterhilft.
Mit freundlichen Grüßen,
foxbird