0

アイテムと呼ばれるクラス「アイテム」の配列を持つ在庫クラスがあります。Item クラス内には、ピックアップごとに獲得できるアイテムの数を表す、int という名前の amount があります。配列内の重複アイテムの数を取得する方法を理解できていないため、そのアイテムの getQuantity() メソッドを掛けて、プレーヤーが持っているアイテムの合計数を取得できます。

public class Inventory {


    private Item[] items;   //A private Item array, called items
    private int firstFree;
    private int quantity;
    private WorldRenderer world;


    /**
     * CREATES THE INVENTORY AT A SIZE SPECIFIED IN THE PARATHENESIS
     */
    public Inventory(int size) {
        items = new Item[size];
        firstFree = 0;
    }


    public int getItemCount() {
        for (int i = firstFree; i < items.length; i++) {
            if (items[i] != null) {
                return items.length;
            }
        }
        return 0;
    }

    public boolean add(Item item) {
        if (firstFree == items.length) {
            return false;
        }
        items[firstFree] = item;

        for (int i = firstFree; i < items.length; i++)
            if (items[i] == null) {
                firstFree = i;
                return true;
            }
        firstFree = items.length;

        return true;


        /**for (int i = 0; i < items.length; i++)
         if (items[i] == null){
         items[i] = item;
         System.out.println("Item " + item.getName() + " added to inventory at index " + i);  // TESTING 
         return true;
         }
         return false;
         }**/
    }

    public Item get(int index) {
        return items[index];
    }

    public void setQuantity(Item item, int quantity) {
        for (int i = 0; i < items.length; i++) {
            if (items[i] == item) {
                items[i].setQuantity(quantity);
            }
        }
    }

    public void removeQuantity(Item item, int quantity) {
        for (int i = 0; i < items.length; i++) {
            if (items[i] == item) {
                items[i].setQuantity(item.getQuantity() - quantity);
            }
        }

    }

    public int getQuantity(Item item) {
        int quantity = 0;
        for (int i = 0; i < items.length; i++) {
            if (items[i] == item) {
                quantity = items[i].getQuantity();
            }
        }
        return quantity;
    }
}

おそらく、特定の問題のインベントリを作成するためのより良い方法はありますか?

編集: HashMap を試して、この行で NPE を取得する

     if (items.containsKey(item)){
        Integer previousQuantity = items.get(items);
        items.put(item,  ++previousQuantity); // NPE this line.
    } else {
        items.put(item,  1);
    }
4

3 に答える 3