Java 向列表中添加游戏对象,同时对其进行迭代

Java 向列表中添加游戏对象,同时对其进行迭代,java,libgdx,Java,Libgdx,我需要将游戏对象添加到列表中。在这个私有数组列表中列表我保存所有游戏数据(敌人、积木、砖块等…)。我是怎么做到的 for(GameObject t : list){ if(Enemy.count < 20){ list.add(new Enemy(100, 100, true)); } } 此代码可以重写 for(GameObject t : list){ if(Enemy.count < 20){ li

我需要将游戏对象添加到列表中。在这个
私有数组列表中列表我保存所有游戏数据(敌人、积木、砖块等…)。我是怎么做到的

for(GameObject t : list){
    if(Enemy.count < 20){
        list.add(new Enemy(100, 100, true));
    }
}

此代码可以重写

   for(GameObject t : list){
        if(Enemy.count < 20){
            list.add(new Enemy(100, 100, true));
        }
    }
for(游戏对象t:列表){
如果(敌方计数<20){
添加(新敌人(100,100,正确));
}
}
作为

if(敌方计数<20){

对于(int i=0;i,当您在迭代列表时尝试修改列表时,将得到java.util.ConcurrentModificationException异常

-如果只是为了删除对象,请使用迭代器,而不是直接对其进行迭代。但是我知道,您需要添加迭代器,因此请使用第二种方法

Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
    String str = iter.next();
    if (str.equals("B")) {
        iter.remove();
    }
}
Iterator iter=list.Iterator();
while(iter.hasNext()){
String str=iter.next();
如果(str.equals(“B”)){
iter.remove();
}
}

-使用CopyOnWriteArrayList而不是简单的ArrayList,您可以按原样使用现有代码。

List<GameObject> list = new CopyOnWriteArrayList<GameObject()>;
for (GameObject t : list) {
    if (Enemy.count < 20) {
        list.add(new Enemy(100, 100, true));
    }
}
List List=newcopyonwritearraylist;
用于(游戏对象t:列表){
如果(敌方计数<20){
添加(新敌人(100,100,正确));
}
}

另一种解决方案是临时使用另一个列表:

List<GameObject> toAdd = new ArrayList<>();
for(GameObject t : list){
  if(Enemy.count < 20){
    toAdd.add(new Enemy(100, 100, true));
  }
}
list.addAll(toAdd);
List toAdd=newarraylist();
用于(游戏对象t:列表){
如果(敌方计数<20){
添加(新敌人(100,100,正确));
}
}
list.addAll(toAdd);

你不能修改你的数组,当你在数组中循环时,其中一个解决方案就是创建副本。显示更多的代码,这样我们就可以找到合适的解决方案。但是创建副本听起来像是浪费资源。你在迭代时真的做了什么,或者代码中缺少了一些行吗您已经给出了?首先,您可以仅为循环目的创建副本,不要忘记您的副本不会保存对象的副本,而只包含对它们的引用。其次,如果您显示更多代码,我们可以为您找到更好的解决方案
List<GameObject> list = new CopyOnWriteArrayList<GameObject()>;
for (GameObject t : list) {
    if (Enemy.count < 20) {
        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);