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
這是我收到的錯誤。ConcurrentModificationException(Java)
我的方法看起來像
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();
}
}
}
}
所以我的理解是,這意味着我改變迭代器的尺寸完成之前,這是你的錯誤。這是真實的,因爲其中一個reactStateChange用於將對象從哈希映射中移除。我該如何安全地做到這一點,以便當我刪除某些東西時,它可以提前知道迭代器,以便我可以避免此錯誤。提前致謝。如果需要更多細節,我很樂意滿足您的要求。
作爲一方的評論:對getCreatures()。get(...)的調用是沒有必要的。你已經擁有了你得到的物體。它是什麼'iterator.next()'返回... – subsub 2011-04-26 19:01:56
可能重複[迭代通過集合,避免ConcurrentModificationException在循環中刪除](http://stackoverflow.com/questions/223918/iterating-through-a- collection-avoid-concurrentmodificationexception-when-re) – Raedwald 2016-03-28 14:32:27