Не могли бы вы поделиться своим кодом / предварительным? и четко указать, что не работает?
При этом, если не привязано к конкретным c ограничениям, следует использовать принцип инкапсуляции и единой ответственности ( см. SOLID в wiki ) сохраняя детали реализации в секрете и делегируя задачи более подходящим классам.
У вас может быть что-то вроде:
class Dorm {
private List<Block> blocks = ...
...
public int getAvailableRooms() {
int total = 0;
for (Block b : blocks) {
total += b.getAvailableRooms();
}
return total;
}
}
class Block {
private List<Room> rooms = ....
...
public int getAvailableRooms() {
int total = 0;
for (Room r : rooms) {
if (! r.isFull()) {
total++;
}
}
}
class Room {
private int capacity = ...
private List<Student> students = ..
...
public boolean isFull() {
return capacity == students.size();
}
}
Где класс Manager, содержащий () экземпляр (ы) Dorm , просто используйте метод getAvailableRooms()
, который за сценой делегирует подчеркивающим блокам и объединяет результат ... и так далее.