我想实施一个像这样工作的方法攻击:来自我的部队的每个战士攻击从另一个部队随机选择的战士。如果受到攻击的战士死亡,必须将其从部队中移除。使用我尝试的方法我得到随机数的错误:
java.lang.IllegalArgumentException: n must be positive
该部队是一个名单<Creature>
战士;我认为我没有正确删除,因为否则我不会有这个错误。
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);
}
答案 0 :(得分:0)
删除该条目会使迭代器无效。你需要保存它,你可以做这样的事情:
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());
永远不会超出最后一个索引(这是减去一个的条目数。