题目详见 B站 AV93347594 P88
大体上是写出一个可以模拟订房、退房和打印房间状态的程序
直接上代码
/*
酒店类
实例变量为一堆房间, 使用二维数组
*/
public class Hotel {
Room[][] rooms;
public Hotel() {
this(5,10);
}
public Hotel(int level, int count) {
rooms = new Room[level][count];
for (int i = 0; i < rooms.length; i++) {
for (int j = 0; j < rooms[i].length; j++) {
rooms[i][j] = new Room();
rooms[i][j].setRoomNo((i+1)*100+j+1);
if (i == 0) rooms[i][j].setRoomType("单人间");
else if ( i > 0 && i < rooms.length -1 ) rooms[i][j].setRoomType("标准间");
else rooms[i][j].setRoomType("豪华间");
}
}
}
public void print() {
for (Room[] floor:rooms
) {
for (Room r:floor
) {
System.out.print(r.getRoomNo()+" "+r.getRoomType()+" "+(r.isEmpty()?"可预订":"已被预订")+"\t");
}
System.out.println();
}
}
public void book(int i) {
for (Room[] floor:rooms
) {
for (Room r:floor
) {
if (i == r.getRoomNo() && r.isEmpty()) {
r.setEmpty(false);
System.out.println("房间 "+i+" 预定成功!");
return;
}
}
}
System.out.println("您的输入似乎有误");
}
public void checkout(int i) {
for (Room[] floor:rooms
) {
for (Room r:floor
) {
if (i == r.getRoomNo() && !r.isEmpty()) {
r.setEmpty(true);
System.out.println("房间 "+i+" 退房成功!");
return;
}
}
}
System.out.println("您的输入似乎有误");
}
}
/*
房间类
对象作为酒店类实例变量
*/
class Room {
private int roomNo;
private String roomType;
private boolean isEmpty = true;
public Room() {
}
public Room(int roomNo, String roomType) {
this.roomNo = roomNo;
this.roomType = roomType;
}
public int getRoomNo() {
return roomNo;
}
public void setRoomNo(int roomNo) {
this.roomNo = roomNo;
}
public String getRoomType() {
return roomType;
}
public void setRoomType(String roomType) {
this.roomType = roomType;
}
public boolean isEmpty() {
return isEmpty;
}
public void setEmpty(boolean empty) {
isEmpty = empty;
}
}
记录一下自己踩的坑:
酒店类的构造方法中, 除了要 new 一个 Room[][] 的二维数组外
还需要给数组中的每个元素, 即 new 出 Room 对象
少了这一步的话, 在 setRoomNo 处会报空指针异常
简单写个测试程序看下效果
public class Test {
public static void main(String[] args) {
Hotel h = new Hotel();
h.print();
h.book(102);
h.print();
h.checkout(102);
h.print();
h.checkout(505);
}
}