при заполнении конкретной ячейки матрицы меняются и другие клетки
Я создаю матрицу Inventory, и заполняю её объектами (предметами из игры), и когда я заполняю 1 ячейку инвентаря условным пистолетом, и меняю ему количество патронов на 12 всё ещё нормально, но когда я заполняю 2 ячейку, почему-то у пистолета в первой ячейке количество патронов становится таким-же, как и у 2. Такое-же изменения наблюдается, меняя название пистолета, или другие переменные пистолета.
player.inventory[0][0] = itemsId.get(1);//заполнить инвентарь игрока предметом из таблицы
player.inventory[0][0].weapon.ammo=1;
System.out.println(player.inventory[0][0].weapon.ammo);
player.inventory[2][0] = itemsId.get(1);//заполнить инвентарь игрока предметом из таблицы
player.inventory[2][0].weapon.name="glock";
player.inventory[2][0].weapon.ammo=3;
System.out.println(player.inventory[0][0].weapon.ammo);
Этот кусочек кода выводит сначала 1, а потом 3, я прописал 2 раза в консоль 1 и ту же переменную. itemsId.get(1) - это лист объектов, где 1 элемент - это пистолет.
Как это исправить? Чем это можно заменить?
Ответы (2 шт):
Ответ уже дал @Wonderf Вы кладете в свою инвентарь в ячейку [0][0] и в ячейку [2][0] один и тот же объект, где бы вы его не поменяли, объект поменяется везде.
Я делаю клон, создавая новый объект, и перенося туда все значения.
public Slot cloneItem (int id) {
switch (itemsId.get(id).type) {
case "weapon" -> {
return new Slot(new Weapon(itemsId.get(id).weapon.image,itemsId.get(id).weapon.recoil,itemsId.get(id).weapon.spread,itemsId.get(id).weapon.rateOfFire,itemsId.get(id).weapon.bulletCount,itemsId.get(id).weapon.damage,itemsId.get(id).weapon.bulletSpeed,itemsId.get(id).weapon.bulletSpeedSpread,itemsId.get(id).weapon.countOfCartridges,itemsId.get(id).weapon.reloadDelay,itemsId.get(id).weapon.canZoom,itemsId.get(id).weapon.cartridgesType,itemsId.get(id).weapon.name));
}
case "boxOfCartridges" -> {
return new Slot(new BoxOfCartridges(itemsId.get(id).boxOfCartridges.type,itemsId.get(id).boxOfCartridges.countOfCartridges,itemsId.get(id).boxOfCartridges.image));
}
default -> {
return new Slot();
}
}
}