2013-07-27 13 views
5

Desidero riassegnare una variabile all'interno di un ciclo for che attraversa una lista array di oggetti. Ma qualunque cosa provi sembra che niente abbia alcun effetto. Fondamentalmente il mio codice assomiglia a questo:Riassegna la variabile in un elenco all'interno del ciclo 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); 

     } 
    } 
} 

Cosa sto facendo male?

+2

utilizzare il metodo set per impostare i valori – Veera

risposta

11

La creazione di un nuovo nemico non ha alcun effetto perché si assegna l'oggetto nemico a una variabile temporanea con una durata limitata a una singola iterazione del ciclo. Se si desidera memorizzare l'oggetto nemico nella lista dei nemici, è necessario aggiungere una chiamata di set metodo, in questo modo:

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

questo dovrebbe sostituire l'oggetto vecchio che rappresenta un nemico con quello che avete appena creato .

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

è solo cambiando il reference e non object riferimento il riferimento. Per questo è necessario un handle interno all'oggetto sotto forma di un metodo esposto, che può modificare l'oggetto dall'interno.

1

Questo codice: enemy = new ExplodingEnemy(enemy.x, enemy.y); crea solo un nuovo oggetto nemico. Il vecchio oggetto nemico rimane così com'è.