首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中删除迭代问题

在java中删除迭代问题
EN

Stack Overflow用户
提问于 2013-04-25 19:28:31
回答 1查看 81关注 0票数 0

我想实现一个像这样的方法攻击:我的部队中的每个战士攻击一个从另一个部队中随机选择的战士。如果被攻击的勇士死亡,必须将其从部队中移走。使用我尝试的方法,我得到了随机数的错误:

代码语言:javascript
复制
 java.lang.IllegalArgumentException: n must be positive

该团队是一个<Creature>战士列表;我认为我没有正确地删除,因为否则我不会有这个错误。

代码语言:javascript
复制
public void atac(Troop opponentTroop){
        for(Creature f : warriors){
            Creature c = getOpponent(opponentTroop);
            f.atac(c);
            ListIterator<Creature> iterator = opponentTroop.warriors.listIterator();
            while(iterator.hasNext()){
                c = iterator.next();
                if(c.isDead()){
                    iterator.remove();                  
                }
            }   

        }       
    }


private Creature getOpponent(Troop opponent){
        int x = rand.getRandomArrayIndex(opponent.warriors.size());
        return opponent.warriors.get(x);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 19:33:34

删除该条目将使迭代器失效。你需要保存它,你可以这样做:

代码语言:javascript
复制
while(iterator.hasNext()) {
    c = iterator.next();
    if(c.isDead()) {
        // Make a temporary iterator
        ListIterator<Creature> toDelete= c;
        // Step the regular one
        c = iterator.next();
        // Remove
        toDelete.remove();                  
    }
}   

此外,请确保int x = rand.getRandomArrayIndex(opponent.warriors.size());永远不会超过最后一个索引(即条目数减去一个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16213556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档