gpt4 book ai didi

JAVA - 从迭代列表中删除非迭代器元素

转载 作者:行者123 更新时间:2023-11-30 10:46:56 24 4
gpt4 key购买 nike

我在遍历此迭代器循环时遇到问题,在该循环中我遍历了 this.env 的每个元素,但在此列表中,我想删除所述列表的不同元素。当我尝试删除所述迭代列表的任何项目时,我收到此错误:java.util.ConcurrentModificationException,据我所知,这是由于在不使用 iterator.remove 的情况下修改迭代列表造成的().

代码:

public void envActions(IOHandler ioHandler, PlayerClass player){
Iterator<WorldElement> worldElementIterator = this.env.iterator();
while(worldElementIterator.hasNext()){
WorldElement worldElement = worldElementIterator.next();
//for(WorldElement worldElement:this.env){
if(worldElement instanceof EntityClass){
EntityClass entity=(EntityClass) worldElement;
if(entity.nature.contains("hostile")){
MonsterClass mEntity=(MonsterClass) entity;
if(!(mEntity.attacks.size()*(Math.random()+0.25)>=mEntity.attacks.size())){
Double followerNum = (Math.random()*player.followers.size());
Integer followerNumInt=followerNum.intValue();
if(followerNumInt<2){
PlayerClass target=player;
Double attacknumD=mEntity.attacks.size()*Math.random();
Integer attacknum= attacknumD.intValue();
Integer playerarmor=player.getArmorValue();
int enemydamage=mEntity.attacks.get(attacknum).getDamage()*(1-(playerarmor/1000));
target.health=target.health-enemydamage;
ioHandler.printToConsole("\nThe "+mEntity.name+" attacked you with "+mEntity.attacks.get(attacknum).getAttack()+" and did "+mEntity.attacks.get(attacknum).getDamage()+" damage! you have "+player.health+" health left!");
} else {
FriendlyCreatureClass target=player.followers.get(followerNumInt);
Double attacknumD=mEntity.attacks.size()*Math.random();
Integer attacknum= attacknumD.intValue();
int enemydamage=mEntity.attacks.get(attacknum).getDamage();
target.health=target.health-enemydamage;
if(!target.isAlive()){
ioHandler.printToConsole("\nThe " + mEntity.name + " attacked " + target.name + " with " + mEntity.attacks.get(attacknum).getAttack() + " and did " + mEntity.attacks.get(attacknum).getDamage() + " damage! " + target.name+" died! Farewell "+target.name+".");
target.died(ioHandler, this, player, true);
//>>>> THIS IS WHERE I WOUlD LIKE TO REMOVE 'target' FROM THE env LIST <<<<
} else {
ioHandler.printToConsole("\nThe "+mEntity.name+" attacked "+target.name+" with "+mEntity.attacks.get(attacknum).getAttack()+" and did "+mEntity.attacks.get(attacknum).getDamage()+" damage! "+target.name+" has "+target.health+" health left!");
}
}
}

请怜悯我的编码技能,因为我只是 java/Android 的初学者,但非常感谢任何建议!

提前致谢!

最佳答案

如果您出于某种原因未使用 Iterator,则可以在迭代集合时将要删除的元素收集到 Set 中,并在循环之后迭代 Set 并从原始集合中删除元素。

请注意,这仅适用于小型集合。

HashSet toDelete = new HashSet();

for (...) {
if (...)
toDelete.add(item);
}
// end for

foreach (item in toDelete) {
// delete from original collection
}

否则,您可以在迭代器上调用 remove()。

关于JAVA - 从迭代列表中删除非迭代器元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320507/

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