[英]Adding game object to list while iterating over it
我需要將游戲對象添加到列表中。 在這個private ArrayList<GameObject> list;
list 我保存了我所有的游戲數據(敵人、方塊、磚塊等等……)。 在這里我如何做到這一點
for(GameObject t : list){
if(Enemy.count < 20){
list.add(new Enemy(100, 100, true));
}
}
我得到這個例外
Exception in thread "LWJGL Application" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
此代碼可以重寫
for(GameObject t : list){
if(Enemy.count < 20){
list.add(new Enemy(100, 100, true));
}
}
作為
if(Enemy.count < 20){
for(int i=0;i<list.size();i++){
list.add(new Enemy(100, 100, true));
}}
另一種解決方案是暫時使用另一個列表:
List<GameObject> toAdd = new ArrayList<>();
for(GameObject t : list){
if(Enemy.count < 20){
toAdd.add(new Enemy(100, 100, true));
}
}
list.addAll(toAdd);
當您嘗試在迭代列表時修改列表時,您將收到 java.util.ConcurrentModificationException 異常。
- 如果目的只是刪除對象,請使用迭代器而不是直接迭代它。 但我明白了,你需要添加它們,因此使用第二種方法
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String str = iter.next();
if (str.equals("B")) {
iter.remove();
}
}
- 使用 CopyOnWriteArrayList 而不是簡單的 ArrayLists,您可以按原樣使用現有代碼。
List<GameObject> list = new CopyOnWriteArrayList<GameObject()>;
for (GameObject t : list) {
if (Enemy.count < 20) {
list.add(new Enemy(100, 100, true));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.