I have a problem with modify list in java, i want to change value in listTempEnemy
with foreach
and then the value change as i want, but it has an affect to listEnemy
which should not change, this is my code Thank You.
public void hunt() {
Enemy enemy = new Enemy();
enemy.setEnemyName("Poring");
enemy.setEnemyMinATK(10);
enemy.setEnemyMaxATK(20);
listEnemy.add(enemy);
List<Enemy> listTempEnemy = new ArrayList<Enemy>();
listTempEnemy.addAll(listEnemy);
for (Enemy enm : listEnemy) {
System.out.println("Before "+ enm.getEnemyMinATK() + " | " + enm.getEnemyMaxATK());
}
for (Enemy enm : listTempEnemy) {
enm.setEnemyMinATK((enm.getEnemyMinATK() * 10/100) + enm.getEnemyMinATK());
enm.setEnemyMaxATK((enm.getEnemyMaxATK() * 10/100) + enm.getEnemyMaxATK());
System.out.println("Value Changed "+ enm.getEnemyMinATK() + " | " + enm.getEnemyMaxATK());
}
for (Enemy enm : listEnemy) {
System.out.println("After "+ enm.getEnemyMinATK() + " | " + enm.getEnemyMaxATK());
}
}
The result is
2020-02-18T17:02:33.843+0700|Info: Before 10 | 20
2020-02-18T17:02:33.843+0700|Info: Value Changed 11 | 22
2020-02-18T17:02:33.843+0700|Info: After 11 | 22
And then i have change my code
private List<Enemy> loadEnemy() {
List<Enemy> listEnemy = new ArrayList<Enemy>();
Enemy enemy = new Enemy();
enemy.setEnemyName("Poring");
enemy.setEnemyHP(100);
enemy.setEnemyMinATK(10);
enemy.setEnemyMaxATK(20);
listEnemy.add(enemy);
return listEnemy;
}
public void hunt() {
List<Enemy> listTempEnemy = loadEnemy();
for (Enemy enm : listEnemy) {
System.out.println("Before "+ enm.getEnemyMinATK() + " | " + enm.getEnemyMaxATK());
}
for (Enemy enm : listTempEnemy) {
enm.setEnemyMinATK((enm.getEnemyMinATK() * 10/100) + enm.getEnemyMinATK());
enm.setEnemyMaxATK((enm.getEnemyMaxATK() * 10/100) + enm.getEnemyMaxATK());
System.out.println("Changed Value " + enm.getEnemyMinATK() + " | " + enm.getEnemyMaxATK());
}
for (Enemy enm : listEnemy) {
System.out.println("After "+ enm.getEnemyMinATK() + " | " + enm.getEnemyMaxATK());
}
}
This is the result that i want
2020-02-18T17:46:36.387+0700|Info: Before 10 | 20
2020-02-18T17:46:36.387+0700|Info: Changed Value 11 | 22
2020-02-18T17:46:36.387+0700|Info: After 10 | 20