我想写一个包含很多类的程序,在一个叫 "Dorm "的类中,我有一个Blocks的数组List,在 "Block "类中,我有一个Room的数组List,在 "Room "类中,我有一个 "Students "的数组List。我想通过另一个叫 "Manager "的类来访问可用房间的数量(至少有一个空位的房间)。我被告知,我可以在Manager类中创建另一个arrayList,作为指针,搜索整个宿舍的空房间。
我的问题是,这要怎么做呢?
ps:这是我写的。
public static void availableRooms() { //Shows the available rooms in the dormitory.
Dorms dormitory = new Dorms();
Room room1 = new Room();
for(int i=0;i<dormitory.getBlocks().size();i++)
for(int j=0;j<Block.getRoomList().size();j++) {
if(!(room1.getStudentList().get(room1.getRoomCapacity()).equals(null)))
System.out.print("/t" + room1.getStudentList().get(i) + "/t");
}
}
我的代码还没写完,所以不知道能不能用... ...
你能分享一下你的代码吗,并明确指出哪些地方不行?
说到这里,除非受到特定的约束,否则应该利用封装和单一责任原则(看SOLID),保持实现细节的私密性,并将任务委托给更相关的类。
你可能有这样的东西。
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()
方法,在幕后委托给下划线的Blocks和汇总结果...等等。