2013-07-27 19 views
5

Ich möchte eine Variable innerhalb einer for-Schleife neu zuweisen, die über eine ArrayList von Objects läuft. Aber was auch immer ich versuche, scheint nichts zu bewirken. Grundsätzlich sieht mein Code so aus:Variable in einer Liste innerhalb von for-loop neu zuweisen

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

     } 
    } 
} 

Was mache ich falsch?

+2

Verwenden Sie die set-Methode, um die Werte festzulegen – Veera

Antwort

11

Das Erstellen eines neuen Gegners hat keine Auswirkungen, da Sie das gegnerische Objekt einer temporären Variablen zuweisen, deren Lebensdauer auf eine einzige Schleifeniteration beschränkt ist. Wenn Sie den Feind Objekt in der Liste der Feinde speichern möchten, müssen Sie einen Anruf von set Methode hinzuzufügen, wie folgt aus:

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

dies das alte Objekt ersetzen würde einen Gegner mit dem einen repräsentieren Sie gerade erstellt haben .

4
enemy = new ExplodingEnemy(enemy.x, enemy.y); 

ändert sich nur die reference und nicht die object mit dem Bezugs verwiesen. Dazu benötigen Sie ein internes Handle zum Objekt in Form einer exposed-Methode, die das Objekt von innen modifizieren kann.

1

Dieser Code: enemy = new ExplodingEnemy(enemy.x, enemy.y); erstellt nur ein neues Feindobjekt. Das alte Feindobjekt bleibt so wie es ist.

Verwandte Themen