繁体   English   中英

Java-For循环仅运行一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM