1

クラス Rebel がクラス Item からアイテムを購入できるように、メソッド BuyItem を呼び出そうとすると、次のメッセージが表示されます。

java.lang.NullPointerException: null

私はすべてを試してきたように感じます。コードの何が問題なのか誰かわかりますか?

ここに私の方法があります:

public boolean buyItem(Item item) {
    int totalWeight = currentWeight() + item.getWeight();
    if(totalWeight <= maxCarryingCapacity && money >= item.getPrice()){
        money -= item.getPrice();
        backpack.put(item.getName(), item);
        return true;
    } else {
        return false;
    }
}

/**
 * @param item
 * @return current carrying weight
 */
private int currentWeight() {
    int tempWeight = 0;
    for(Entry<String, Item> entry: backpack.entrySet()) {
        tempWeight += entry.getValue().getWeight();
    }
    return tempWeight;
}

立ち往生しているので、誰かが私を助けてくれたら本当に嬉しいです!

エラーが発生するのは、currentWeight の 2 行目と buyItem の 1 行目です。ターミナル ウィンドウには次のように表示されます。

rebel1.buyItem(item1)
Exception occurred.

java.lang.NullPointerException
at Rebel.currentWeight(Rebel.java:190)
at Rebel.buyItem(Rebel.java:56)
4

1 に答える 1

1

これは間違いなくバックパックが初期化されていないようです。次のようなコンストラクタを使用する価値があるかもしれません

public class Rebel{
    private final Map<String, Item> backpack;
    public Rebel(Map<String, Item> backpack, <Other parameters){
        this.backpack = backpack;
    }
    public Rebel(<Other parameters>){
        this(new HashMap<String,Item>(),<Other parameters>);
    }
}

明らかに<Other parameters>、現在のコンストラクターパラメーターに置き換えます。

于 2013-03-13T22:15:33.503 に答える