Не могу поместить объект в hashmap, связанный с другим объектом - PullRequest
0 голосов
/ 10 января 2019

Итак, я делаю эту утешительную игру.

Но я не могу понять этот бит или почему неправильно так делать.

В общем, у меня есть 10 комнат поэтому в комнате есть следующие вещи:

- номер комнаты

-Hashmap, который содержит номер в качестве значения и строку в качестве ключа

Теперь проблема в том, что из комнаты можно выйти из четырех направлений: север, восток, юг, запад, так что это строка / ключ в хэш-карте Он также может иметь 2 выхода или 1 или 3. Таким образом, в этой хэш-карте я сохраняю направление в качестве ключа и в качестве значения другой объект комнаты, чтобы я мог отслеживать, какой выход идет в какую комнату. поэтому у меня есть метод для добавления выходов. это выглядит так: Код

public class Room {
    private int RoomNo;
    private HashMap<String, Room> Exits;

    public Room(int roomNo){
        Exits = new HashMap<String, Room>();
        this.RoomNo = roomNo;

    }

    public void Addexits(Room room, String exitDirection){
            Exits.put(exitDirection,room);
    }

А потом в игровом классе я создаю 10 комнат и использую метод addexits для добавления выходов, которые выглядят так:

Rooms = new ArrayList<Room>();
     //initialize all rooms
     room1 = new Room(1);
     room1.Addexits(room4,"West");
     room1.Addexits(room3,"East");
     room2 = new Room(2);
     room2.Addexits(room2,"North");
     room2.Addexits(room2,"South");
     room3 = new Room(3);
     room3.Addexits(room3,"West");
     room3.Addexits(room3,"East");
     room4 = new Room(4);
     room4.Addexits(room4,"West");
     room4.Addexits(room4,"East");

Однако, как вы можете видеть с комнатой1, я пытаюсь добавить 2 выхода 1 на западе к комнате4 и 1 на востоке к комнате3, однако, когда я запускаю это, это показывает это в хэш-карте: Запад -> ноль Восток -> ноль

Но когда я добавляю 2 выхода для обоих объектов room1, он выглядит так, как должно быть:

Запад -> комната1 Восток -> комната1

Так что я действительно не понимаю, что я делаю неправильно, каждая комната имеет свою собственную хэш-карту при создании, и комнаты уже созданы, так что это не должно быть проблемой.

Ответы [ 3 ]

0 голосов
/ 10 января 2019

В приведенном ниже коде

Rooms = new ArrayList<Room>();
 //initialize all rooms
 room1 = new Room(1);
 room1.Addexits(room4,"West");
 room1.Addexits(room3,"East");

Вы добавляете room3 и room4, которые еще не инициализированы. Вы только что объявили это. Вот почему вы получаете ноль. Попробуйте добавить его после инициализации.

Rooms = new ArrayList<Room>();
 //initialize all rooms
 room1 = new Room(1);
 room2 = new Room(2);
 room2.Addexits(room2,"North");
 room2.Addexits(room2,"South");
 room3 = new Room(3);
 room3.Addexits(room3,"West");
 room3.Addexits(room3,"East");
 room4 = new Room(4);
 room4.Addexits(room4,"West");
 room4.Addexits(room4,"East");
 //here you add room4 and room3 exits
 room1.Addexits(room4,"West");
 room1.Addexits(room3,"East");
0 голосов
/ 10 января 2019

Это потому, что когда вы вызываете Addexits (), не гарантируется, что добавляемая вами комната уже существует. Поэтому переключение ваших утверждений должно исправить это.

Rooms = new ArrayList<Room>();
//initialize all rooms
room1 = new Room(1);
room2 = new Room(2);
room3 = new Room(3);
room4 = new Room(4);

// add all exits
room1.Addexits(room4,"West");
room1.Addexits(room3,"East");

room2.Addexits(room2,"North");
room2.Addexits(room2,"South");

room3.Addexits(room3,"West");
room3.Addexits(room3,"East");

room4.Addexits(room4,"West");
room4.Addexits(room4,"East");

Также обратите внимание, что вы добавляете room3 как выход к room3, то же самое для комнат 2 и 4. Я не знаю, так ли это.

0 голосов
/ 10 января 2019

сначала инициализировать все комнаты, а затем добавить выходы;

 room1 = new Room(1);
 room2 = new Room(2);
 room3 = new Room(3);
 room4 = new Room(4);
 room1.Addexits(room4,"West");
 room1.Addexits(room3,"East");
 room2.Addexits(room2,"North");
 room2.Addexits(room2,"South");
 room3.Addexits(room3,"West");
 room3.Addexits(room3,"East");
 room4.Addexits(room4,"West");
 room4.Addexits(room4,"East");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...