1

テキストベースのアドベンチャー ゲーム プロジェクトに取り組んでいます。アイテムが入った部屋と、部屋から部屋への移動が含まれます。Item と呼ばれるクラスと、このより大きな Room と呼ばれるクラスがあります。addNeighbor を除くすべてのメソッドが機能しているようです (おそらく getNeighbor もそうです)。アイテムを含む部屋を作成しましたが、それは問題なく機能し、2 つ目の部屋を作成しましたが、隣人を追加しようとするとクラッシュしてしまいました。私はヌルポインタ例外です。ここで何が間違っていますか?

public class Room
{
    private String roomDescription;
    private Item item;
    private HashMap <String, Room> myNeighbors;

    public Room (String pDescription){
        roomDescription = pDescription;
        item = null;
    }

    public Room (String pDescription, Item pItem){
        roomDescription = pDescription;
        item = pItem;
    }

    public String getRoomDescription(){
        return roomDescription;
    }

    public Item getItem(){
        return item;
    }

    public void addItem (Item i){
        item = i;
    }

    public boolean hasItem(){
        if(item != null){
            return true;
        }else{
            return false;
        }
    }

    public void addNeighbor (String pDirection, Room r){
        myNeighbors.put(pDirection, r);
    }

    public Room getNeighbor (String pDirection){
        return myNeighbors.get(pDirection);
    }

    public Item removeItem(){
        item = null;
        return item;
    }

    public String getLongDescription(){
        String longDescription = "You are at " + roomDescription + "You see " + item;
        return longDescription;
    }
}
4

4 に答える 4

2

初期化したことがありませんmyNeighbors。それはどこにも指していない単なる参照です。

を考慮してくださいprivate HashMap <String, Room> myNeighbors = new HashMap<String,Room>();

于 2012-04-05T01:10:25.503 に答える
1

私の隣人は決して初期化されません。

あなたはこれを忘れました:

 private HashMap <String, Room> myNeighbors= new HashMap<String Room>();

よろしく。

于 2012-04-05T01:13:00.130 に答える
1

あなたはnew地図を持っています。コンストラクタを次のように変更します。

public Room (String pDescription, Item pItem)
{
        roomDescription = pDescription;
        item = pItem;
        // add this
        myNeighbors = new HashMap <String, Room>();
}

他のコンストラクターを次のように変更します。

public Room (String pDescription)
{
        this(pDescription, null);
}
于 2012-04-05T01:13:56.097 に答える
1

次のコードは null セーフではありません。

public void addNeighbor (String pDirection, Room r){
    myNeighbors.put(pDirection, r);
}

public Room getNeighbor (String pDirection){
    return myNeighbors.get(pDirection);
}

あなたが試すことができます:

public void addNeighbor (String pDirection, Room r){
    if(myNeighbors == null) {
       myNeighbors = new HashMap <String, Room>();
    }
    myNeighbors.put(pDirection, r);
}

public Room getNeighbor (String pDirection){
    if(myNeighbors == null) {
       myNeighbors = new HashMap <String, Room>();
    }
    return myNeighbors.get(pDirection);
}

または

private HashMap <String, Room> myNeighbors = new HashMap <String, Room>();
于 2012-04-05T01:10:57.417 に答える