Java - ArrayList 返回空

Java - ArrayList is returning Empty

我正在 class 中创建一个名为 Inventory 的数组列表。这里有添加、删除和获取列表的方法。我在名为 combat 的新 class 中创建了一个新数组列表,并使用 get 方法将此数组列表设置为 Inventory class 中的数组列表。

这是库存class部分:

private ArrayList<String> inventory;

public Inventory() {
    this.inventory = new ArrayList<>();
}

public void addToInventory(String item) {
    inventory.add(item);
    System.out.println("A " + item + " has been added to your inventory");
    printInventory();
}

public void removeFromInventory(String item) {
    inventory.remove(item);
}

public ArrayList<String> getInventory() {
    return inventory;
}

这是在战斗中Class:

private Inventory inventory = new Inventory();
private ArrayList<String> playerInventory = inventory.getInventory();

public Combat() {

}

@Override
public void setPlayerHit() {
    System.out.println(playerInventory);

当我调用打印 playerInventory 行时,arrayList returns[]。然而在清单 class 它有一些东西,因为我向它添加了一个项目,显示在我的启动器 class:

playerInventory.addToInventory(item.getItem(9));

我可以使用 public 字段使它工作,但我想利用封装并使用 getter 和 setter。能否请我指点一下?

When I call the print playerInventory line, the arrayList returns []

您没有在清单中插入任何字符串...因此是空列表...

顺便说一句,这是多余的:

private ArrayList<String> playerInventory = inventory.getInventory();

因为您通过组合使用具有 ArrayList

的清单对象

再试一次

public Combat() {
    inventory.addToInventory("f1");
    inventory.addToInventory("f2");
}

现在您的清单对象有 2 个元素

只是猜测,但听起来您在代码的不同部分使用了单独的 Inventory 对象。它们不会共享相同的内部 inventory 数组列表,并且添加到一个 Inventory 对象的项目不会出现在另一个对象中。确保您正在打印的 Inventory 对象与您添加项目的对象相同。

如果你想要一个单一的全局Inventory对象,你可以使用单例:

public class Inventory {
    private static Inventory instance = new Inventory();
    private ArrayList<String> inventory;

    public static Inventory getInstance() {
        return instance;
    }

    // private constructor to prevent extra copies of the inventory
    private Inventory() {
        inventory = new ArrayList<>();
    }

    ...
}