[英]Java - For loop only runs once
我最近问了这个问题: Box2D-无法销毁多个灯具 ,但发现这不是Box2D的问题,而是我的Java的问题。 这是我的代码:
public static void removeSpecifiedBodies() {
for (Body body : bodiesToRemoveList) {
Array<Fixture> fixtures = body.getFixtureList();
for (Fixture fixture : fixtures) {
body.destroyFixture(fixture);
}
}
bodiesToRemoveList.clear();
}
我正在做的事情是遍历bodyToRemoveList中的所有主体。 然后,每个身体都有多个固定装置,所以我将它们全部拿出并循环通过它们,从而破坏每个固定装置。 完成所有这些操作后,我清除了bodyToRemoveList。 但是,在我的第二个for循环中,当我销毁灯具时,只有一个被销毁。 我进行了一些调试,发现for循环仅运行一次。 我不确定为什么会这样。 谷歌搜索显示了其他人遇到此问题,就像我在做的那样,我注意到他们都从列表中删除或清除了项目。 我的代码没有问题,但是由于某种原因,我尝试解决的所有问题。 有人看到我的代码有问题吗? 提前致谢。
编辑:我是个白痴。 感谢所有提供帮助的人。 这是我的代码,如果有人想看的话。
public static void removeSpecifiedBodies() {
Iterator<Body> i = bodiesToRemoveList.iterator();
while (i.hasNext()) {
Body desBod = i.next();
//body.destroyFixture(fixture);
WorldController.b2world.destroyBody(desBod);
i.remove();
}
bodiesToRemoveList.clear();
}
除非直接使用Iterator(并与循环共享),否则您不应该修改要迭代的列表。 由于您无权访问for
循环使用的Iterator,因此可以肯定会得到混合结果。
所以,无论是直接使用迭代器,或另一种方法是累积所有的另一个集合,你想从列表中删除的项目,然后removeAll
从原来的集合。 因为您要遍历整个列表两次,所以这有点贵,但它简单明了,并且对于简短列表,可能不是一个真正的问题。
除此以外:
List<Fixture> fixtures = body.getFixtureList();
Iterator<Fixture> i = fixtures.iterator();
while(i.hasNext()) {
Fixture fixture = i.next();
if (destroyFixture(fixture)) {
i.remove();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.