好的,我的课程项目涉及到一个 "Sprite" 类的 ArrayList,我使用增强型 for 循环遍历它,有时需要删除当前正在查看的 Sprite。我被告知可以使用迭代器来安全地进行此操作(即不会删除当前正在查看的 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);
}
}
如果(s.shouldRemove())为真,我需要实现一个迭代器。如果 shouldRemove() 返回 true,则需要从 ArrayList 中删除 s。
for(int i = sprites.size(); i >= 0; i--)
。否则,可能会导致“ConcurrentModificationException”异常。内部循环保持不变。 - Juneyoung Oh