gpt4 book ai didi

java - 在 while 循环内的 foreach 循环内的列表上使用删除

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:41 29 4
gpt4 key购买 nike

我有一项任务,要创建一个比赛模拟器。我有 8 个对象存储在列表中。我需要查看其中一个对象何时越过终点线,并将它们从列表中删除并将它们放入另一个列表中。为此,我使用了 foreach 循环。我需要在每次执行一步时执行此检查,因此 foreach 循环位于 while 循环内。当每个人都冲过终点线时,while 循环将停止并结束比赛。

while (lista.size()>0) {
for (RaceTurtle raceTurtle : lista) {
raceTurtle.raceStep();
if(raceTurtle.getX() > RaceWindow.X_END_POS) {
lista.remove(raceTurtle);
winners.add(raceTurtle);
}
w.delay(10);
}
}

我尝试使用迭代器,但它只会抛出同样的错误。我还尝试使用原始列表的副本,但这似乎不起作用,因为它位于 while 循环内。

如果有人能给我一个如何完成此操作的示例,我将不胜感激。

再次尝试使用迭代器,这次成功了。

while (lista.size()>0) {
for (Iterator<RaceTurtle> iterator = lista.iterator(); iterator.hasNext();) {
RaceTurtle temp = iterator.next();
temp.raceStep();
if (temp.getX()> RaceWindow.X_END_POS) {
winners.add(temp);
iterator.remove();
}
}
w.delay(50);
}

最佳答案

如果您收到 ArrayIndexOutOfBoundsException 或类似的情况,请考虑在列表为空时中断 for 循环内的 while 循环。例如:

outer: // label the loop
while (lista.size()>0) {
for (RaceTurtle raceTurtle : lista) {
raceTurtle.raceStep();
if(raceTurtle.getX() > RaceWindow.X_END_POS) {
lista.remove(raceTurtle);
winners.add(raceTurtle);
}
if (lista.size()>0) {
break outer; // end the outer loop, preventing
// the possible iteration of nothing
}
w.delay(10);
}
}

关于java - 在 while 循环内的 foreach 循环内的列表上使用删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56212547/

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