首页 > 解决方案 > 由于运行时对列表的更改而导致的每个超出范围

问题描述

有一个基类,其中包含一个子类作为成员。在所述子类中,我有一个方法,其中有一个 for each 循环,我在其中运行一个列表并在所述列表中的每个变量上运行一个方法。在所述列表中,有两个对象可能会或可能不会从基类的列表中删除对象。问题是由于某种原因,每当所述两个对象从列表中删除一个元素时,循环就会崩溃。有趣的是,由于某种原因,只有当第二个对象从列表中删除一个元素时,程序才会崩溃。我尝试添加更多这样的变量,由于某种原因,只有倒数第二个对象可以从列表中删除元素而不会导致程序崩溃。希望对此事有所帮助。添加了一些基本代码:

public class Game {
private SpriteCollection sprites;
public void initialize() {
    sprites.addelement(e1);
    sprites.addelement(e2);
    sprites.addelement(remover removerElement1);
    sprites.addelement(remover removerElement2);
    }
public class spriteCollection {
public java.util.List<Sprite> sprites;
    public void notifyAllTimePassed() {
            for (Sprite c : sprites) {  // for each sprite
                c.timePassed(); // move it
            }
        }
    }
public class remover {
public void timePassed() {
removesprite(e1, game) // removing the element from the game which 
 // contains the sprite collection the remover element is a part of
    }
}

标签: java

解决方案


在尝试调试事物时,我找到了一个相当方便的解决方案。我没有使用 for each 循环,而是选择使用迭代器,并发现它要简单得多。所需要的只是:

for (Sprite c : sprites) {  // for each sprite
            c.timePassed(); // move it
        }

for (int i = 0; i < sprites.size(); i++) {
        Sprite tempSprite = sprites.get(i);
        tempSprite.timePassed();
    }

这样如果大小减小,整个事情就会立即停止,而不是运行一个空索引。解决方案相当平庸,老实说,我很惊讶我一直坚持这么久。


推荐阅读