gpt4 book ai didi

Java - For循环只运行一次

转载 作者:行者123 更新时间:2023-12-01 23:03:33 25 4
gpt4 key购买 nike

我最近问了这个问题:Box2D - Can't destroy multiple fixtures ,但发现这不是 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();
}

最佳答案

您不应该修改正在迭代的列表,除非您直接使用迭代器(并与循环共享它)。由于您无权访问 for 循环正在使用的迭代器,因此您肯定会得到混合结果。

因此,要么直接使用迭代器,要么另一种方法是将要从列表中删除的所有项目累积到另一个集合中,然后从原始集合中removeAll。这有点贵,因为您要遍历列表两次,但它简单干净,对于短列表来说,可能不是真正的问题。

否则:

List<Fixture> fixtures = body.getFixtureList();
Iterator<Fixture> i = fixtures.iterator();
while(i.hasNext()) {
Fixture fixture = i.next();
if (destroyFixture(fixture)) {
i.remove();
}
}

关于Java - For循环只运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23171612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com