gpt4 book ai didi

java - 并发修改异常

转载 作者:行者123 更新时间:2023-12-01 17:08:02 25 4
gpt4 key购买 nike

这段代码抛出 ConcurentModificationException。这是在我称为更新女巫的函数中,它是 Android 游戏的一部分,它被称为 60 次/分钟(我认为这是问题所在,但 IDK):

List<Bullet> blts = robot.getBullets();
if (blts.size() > 0 && enemys.size() > 0) {
Iterator<Bullet> it_b = blts.iterator();
Iterator<Enemy> it_e = enemys.iterator();
while (it_e.hasNext()) {
Enemy e = it_e.next();
it: while (it_b.hasNext()) {
Bullet b = it_b.next();
if (b.getRect().intersect(e.getRect())) {
e.degreesHealth(20);
it_b.remove();
if (e.getHealth() <= 0) {
it_e.remove();
break it;
}
}
}
}
}

如果重要的话,这是全类:http://pastebin.com/R4rX7DBY

最佳答案

您迭代了敌人.iterator() it_e,当您这样做时,您可以使用 it_e.remove(); 从中删除一个元素,可能更多不止一次。

Iterator 的 javadoc 说,每个 next() 只能调用 remove() 一次,但由于您正在调用 it_e.remove() code> 在内循环 (while (it_b.hasNext())) 中,您可能会在每个 it_e.next( ) 来自父循环 (while (it_e.hasNext()))。

http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove()

关于java - 并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24497480/

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