Exception in thread "main" java.util.ConcurrentModificationException
Squash the PC dirties the room Violet. The room's state is now dirty
Lily the animal growls
The Animal Lily left the room and goes to Green through the west door.
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)
at homework5.Room.critReactRoomStateChange(Room.java:76)
at homework5.PC.play(PC.java:121)
at homework5.Main.main(Main.java:41)
Java Result: 1
C'est l'erreur que je reçois.ConcurrentModificationException (Java)
Ma méthode ressemble
public void critReactRoomStateChange(String command, PC pc) {
Creature temp = null;
Iterator iterator = getCreatures().keySet().iterator();
while (iterator.hasNext()) {
String names = iterator.next().toString();
if (!(getCreatures().get(names) instanceof PC)) {
temp = getCreatures().get(names);
if (temp != null) {
temp.reactStateChange(command, pc);
temp.checkNewRoom();
}
}
}
}
Donc ce que je comprends est que cela signifie que je change la taille de la iterator avant qu'il ne soit terminé, ce qui est l'erreur que vous obtenez. Cela est vrai car l'un des reactionnStateChange est pour qu'un objet soit retiré du hashMap. Comment puis-je le faire en toute sécurité de sorte que lorsque je supprime quelque chose, il laisse l'Iterator savoir à l'avance afin que je puisse éviter cette erreur. Merci d'avance. Si plus de détails sont nécessaires, je serais heureux de répondre à vos demandes.
comme commentaire sur le côté: les appels à 'getCreatures(). Get (...)' ne sont pas nécessaires. vous avez déjà l'objet que vous obtenez. c'est ce que 'iterator.next()' renvoie ... – subsub
Copie possible de [Itérer à travers une collection, évitant ConcurrentModificationException lors de la suppression dans la boucle] (http://stackoverflow.com/questions/223918/iterating-through-a- collection-avoiding-concurrmodificationexception-when-re) – Raedwald