我想在for循环遍历对象的ArrayList中重新分配变量。但无论我尝试什么,似乎都没有任何效果。基本上我的代码看起来像这样:
for (int i = 0; i < enemies.size(); i++) {
AbstractEnemy enemy = enemies.get(i);
if (enemy.intersects(bullet)) {
enemy.getsHit(bullet.getDamage());
bulletList.remove(bullet);
if (enemy.isDead()) {
// This does not work
enemy = new ExplodingEnemy(enemy.x, enemy.y);
}
}
}
我做错了什么?
答案 0 :(得分:11)
创建新的敌人没有任何效果,因为您将敌方对象分配给临时变量,其生命周期限制为单循环迭代。如果你想将敌人对象存储在敌人列表中,你需要添加set
方法的调用,如下所示:
enemy = new ExplodingEnemy(enemy.x, enemy.y);
enemies.set(i, enemy);
这将用你刚刚创建的对象替换代表敌人的旧对象。
答案 1 :(得分:4)
enemy = new ExplodingEnemy(enemy.x, enemy.y);
只是更改引用所引用的reference
而不是object
。为此,您需要以暴露方法的形式对对象的内部句柄,该方法可以从内部修改对象。
答案 2 :(得分:1)
此代码:enemy = new ExplodingEnemy(enemy.x, enemy.y);
只是创建一个新的敌人对象。旧的敌人物体保持不变。