5

我想在遍历对象 ArrayList 的 for 循环中重新分配一个变量。但无论我尝试什么,似乎都没有任何效果。基本上我的代码如下所示:

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);

        }
    }
}

我究竟做错了什么?

4

3 回答 3

11

创建一个新敌人没有任何效果,因为您将敌人对象分配给一个临时变量,其生命周期限制为单个循环迭代。如果要将敌人对象存储在敌人列表中,则需要添加一个set方法调用,如下所示:

enemy = new ExplodingEnemy(enemy.x, enemy.y);
enemies.set(i, enemy);

这会将代表敌人的旧对象替换为您刚刚创建的对象。

于 2013-07-27T10:48:31.347 回答
4
enemy = new ExplodingEnemy(enemy.x, enemy.y);

只是更改引用reference而不是object引用引用。为此,您需要以公开方法的形式对对象进行内部句柄,该方法可以从内部修改对象。

于 2013-07-27T11:11:38.130 回答
1

这段代码:enemy = new ExplodingEnemy(enemy.x, enemy.y);只是创建了一个新的敌人对象。旧的敌人对象保持原样。

于 2013-07-28T22:10:50.693 回答