при заполнении конкретной ячейки матрицы меняются и другие клетки

Я создаю матрицу 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 шт):

Автор решения: Nikolay

Ответ уже дал @Wonderf Вы кладете в свою инвентарь в ячейку [0][0] и в ячейку [2][0] один и тот же объект, где бы вы его не поменяли, объект поменяется везде.

→ Ссылка
Автор решения: breat

Я делаю клон, создавая новый объект, и перенося туда все значения.

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();
        }
    }
}
→ Ссылка