ООП связанный вопрос о классах внутри классов - PullRequest
3 голосов
/ 21 сентября 2019

Контекст:

Итак, в основном у меня есть класс Map, который содержит имя и другой класс с именем Room.Room содержит int для количества имеющихся у него дверей и класс Door.Door содержит символ для положения двери, который может быть N (orth), E (ast), S (outh), W (est).

Вопрос:

Вот как я настроил свой Room класс:

public class Room {
    int doors;
    Door door;


    public Room(int doors, Door door) {
        this.doors = doors;
        this.door = door;
    }
}

Но таким образом я могу дать ему только 1 дверь, и мне нужно иметь возможность назначить количество дверей, эквивалентное значениюиз дверей.Есть идеи?

Ответы [ 4 ]

2 голосов
/ 21 сентября 2019

просто вы должны использовать массив или список, который может содержать несколько дверей

public class Room {
        Door doors[];
    }

Или вы можете создать список массивов, если вы не уверены с количеством дверей при создании объекта комнаты, потому чтоМассивы имеют фиксированный размер.

public class Room {
    List<Door> doors = new ArrayList<Door>();
}

Если вы используете массивы, вы можете инициализировать объекты дверей, как это, используя конструктор

public Room(int num) {
        this.doors = new Door[num];
        Arrays.fill(this.doors,new Door());
    }
0 голосов
/ 21 сентября 2019

Вы можете использовать List для хранения Door с в классе Room и добавить несколько конструкторов для поддержки создания Room с массивом Door с или с List из Door s.Кроме того, вы можете определить метод для добавления Door s к Room после создания экземпляра.

public class Room {

    private final List<Door> doors = new ArrayList<>();

    public Room(Door... doors) {
        this.doors.addAll(Arrays.asList(doors));
    }

    public Room(List<Door> doors) {
        this.doors.addAll(doors);
    }

    public void addDoor(Door door) {
        this.doors.add(door);
    }

    public List<Door> getDoors() {
        return doors;
    }
}

Если вас интересуют некоторые предложения по вашему классу Door, прочитайтениже.

Поскольку направление может быть N, E, S или W, лучше использовать enum, а не общее char значениеограничить значение направления только этими 4 значениями.

0 голосов
/ 21 сентября 2019

Например, вы можете использовать массив Door s:

public class Room {
    Door[] doors;


    public Room(int n) {
        this.doors = new Door[n];
        for (int i = 0; i < n; i++) {
            this.doors[i] = new Door();
        }
    }
}

Таким образом, вам даже не нужно хранить количество дверей, поскольку это просто length из doors массив.

0 голосов
/ 21 сентября 2019

Используйте массив дверей.Вам не нужно количество дверей, так как оно будет равно длине массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...