我想实现一个像这样的方法攻击:我的部队中的每个战士攻击一个从另一个部队中随机选择的战士。如果被攻击的勇士死亡,必须将其从部队中移走。使用我尝试的方法,我得到了随机数的错误:
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);
}发布于 2013-04-25 19:33:34
删除该条目将使迭代器失效。你需要保存它,你可以这样做:
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());永远不会超过最后一个索引(即条目数减去一个。
https://stackoverflow.com/questions/16213556
复制相似问题