在Java中使用带有增强的for循环的迭代器?

时间:2015-10-08 05:27:40

标签: java loops for-loop iterator

好的,在我的I类项目中,我正在查看我班级的一个ArrayList" Sprite"使用增强的for循环,我偶尔需要删除我正在查看的Sprite。我告诉我可以安全地执行此操作(即不删除I'我目前正在查看的Sprite)与迭代器。我在Oracle的java文档中查了一下,但我并不理解它..

这是我的方法:

public void forward() {
    for (Sprite s : sprites) {
        s.move();
        for(Sprite x : sprites){
            if(s!=x && s.overlaps(x)){                  
                if(s instanceof Razorback && x instanceof Opponent){
                    x.hit();
                }
                if(x instanceof Razorback && s instanceof Opponent){
                    s.hit();
                }
            }

        }
        if(s.shouldRemove())
            sprites.remove(s);

    }

}

if(s.shouldRemove())是我需要实现迭代器的地方。如果shouldRemove()返回true,则需要从ArrayList中删除。

2 个答案:

答案 0 :(得分:5)

您需要使用迭代器本身循环(并删除)。

for (Sprite s : sprites) {

应更改为,

Iterator<Sprite> it = sprites.iterator();
while (it.hasNext()) {
    Sprite s = it.next();

然后你的if条件将是,

if (s.shouldRemove())
    it.remove();

答案 1 :(得分:2)

除了@Codebender回答:为了限制迭代器变量的范围,你可以使用普通的for循环:

for(Iterator<Sprite> it = sprites.iterator(); it.hasNext(); ) {
    Sprite s = it.next();

    ...
    if (s.shouldRemove())
        it.remove();
}

这样,循环后it变量未定义。