在迭代时将游戏对象添加到列表
Adding game object to list while iterating over it
我需要将游戏对象添加到列表中。在这个 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)
这段代码可以重写
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));
}}
当您尝试在遍历列表的同时修改列表时,您将得到 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));
}
}
另一个解决方案是临时使用另一个列表:
List<GameObject> toAdd = new ArrayList<>();
for(GameObject t : list){
if(Enemy.count < 20){
toAdd.add(new Enemy(100, 100, true));
}
}
list.addAll(toAdd);
我需要将游戏对象添加到列表中。在这个 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)
这段代码可以重写
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));
}}
当您尝试在遍历列表的同时修改列表时,您将得到 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));
}
}
另一个解决方案是临时使用另一个列表:
List<GameObject> toAdd = new ArrayList<>();
for(GameObject t : list){
if(Enemy.count < 20){
toAdd.add(new Enemy(100, 100, true));
}
}
list.addAll(toAdd);