我需要将游戏对象添加到列表中。在这个private ArrayList<GameObject> 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)
答案 0 :(得分:1)
此代码可以重写
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));
}}
答案 1 :(得分:1)
另一个解决方案是暂时使用另一个列表:
List<GameObject> toAdd = new ArrayList<>();
for(GameObject t : list){
if(Enemy.count < 20){
toAdd.add(new Enemy(100, 100, true));
}
}
list.addAll(toAdd);
答案 2 :(得分:0)
当你尝试修改列表时,你会得到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));
}
}