gpt4 book ai didi

java - 删除一个实体,然后在其位置添加一个新实体

转载 作者:行者123 更新时间:2023-11-30 04:08:38 24 4
gpt4 key购买 nike

所以我正在制作一款僵尸模拟游戏。此时我所拥有的是一群随机奔跑的玩家和僵尸。当幸存者与僵尸相撞时,我希望它移除幸存者并将其替换为僵尸,本质上将他变成僵尸。

碰撞检测工作正常(我只是使用 awt 矩形和 intersect 方法)。不过,我有一个僵尸数组列表和一个幸存者数组列表。当发生碰撞时,我将僵尸添加到僵尸列表中。然后我将幸存者从该列表中删除。它工作了几次,然后随机抛出索引越界异常。

java.lang.IndexOutOfBoundsException: Index: 13, Size: 13
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)
at com.caveragestudios.zombiesim.World.update(World.java:53)
at com.caveragestudios.zombiesim.Main.update(Main.java:93)
at com.caveragestudios.zombiesim.Main.run(Main.java:69)
at java.lang.Thread.run(Unknown Source)

我尝试过使用高级 for 循环、常规 for 循环和带有 while 循环的迭代器。似乎什么都不起作用。这是我现在的代码。

    for (int i = 0; i < survivors.size(); i++) {
Survivor s = survivors.get(i);
for (int ii = 0; ii < zombies.size(); ii++) {
Zombie z = zombies.get(ii);
if (z.bounds.intersects(s.bounds)) {
zombies.add(new Zombie(s.position, this));
survivors.remove(i);
}
}
}

其他一切似乎都工作正常,只是当我尝试修改列表时,它有点困惑并抛出索引越界异常。有什么想法吗?

最佳答案

您已使用外部列表survivors索引i到内部列表zombies。您的索引变量在 zombies.get(i) 处是错误的。

  for (int i = 0; i < survivors.size(); i++) {
Survivor s = survivors.get(i);
for (int ii = 0; ii < zombies.size(); ii++) {
Zombie z = zombies.get(ii);// Here use ii instead of i
//..............
}
}
<小时/>

要从集合中删除元素,请使用Iterator.remove。像下面这样更改您的代码,以便从集合中安全删除。

 Iterator<Survivor > survIt=survivors.iterator();     
Iterator<Zombie> zombIt=zombies.iterator();
while(survIt.hasNext()){
Survivor s=survIt.next();

while(zombIt.hasNext()){
Zombie z=zombIt.next();

if (z.bounds.intersects(s.bounds)) {
zombies.add(new Zombie(s.position, this));

survIt.remove(); //Use Iterator.remove.

}
}
}

关于java - 删除一个实体,然后在其位置添加一个新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170986/

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