在for循环中重新分配List中的变量

时间:2013-07-27 10:45:31

标签: java

我想在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);

        }
    }
}

我做错了什么?

3 个答案:

答案 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);只是创建一个新的敌人对象。旧的敌人物体保持不变。