两个需求

2020.02.16
第十一次记录
今天跟着视频做了两道题,自己做不出来,只能作出一半,太打击信心了,但也要坚持,希望以后可以慢慢做出来吧。
需求1:
编写程序,使用一维数组,模拟栈数据结构。
要求:
1.这个栈可以存储java中的任何引用类型的数据。
2.在栈中提供push方法模拟压栈(栈满了要有提示信息)。
3.在栈中提供pop方法模拟弹栈(栈空了要有提示信息)。
4.编写测试程序,new栈对象,调用push、pop方法模拟压栈、弹栈动作。
5.假设栈的默认初始化容量是10(请注意无参数构造方法的编写方式)
代码演示1:

    public class MyStack {
    
    
    // Object数组可以存储java中的任何引用类型的数据
    private Object[] elements;
    //栈帧
    private int Index;
    //无参构造
    public MyStack() {
    
    
        //一维数组动态初始化
        //默认初始化容量是10
        this.elements = new Object[10];
        //如果采用-1,表示栈帧指向顶部元素
        this.Index = -1;
    }
    //有参构造
    public MyStack(Object[] elements) {
    
    
        this.elements = elements;
    }
    //setter and getter
    public Object[] getElements() {
    
    
        return elements;
    }
    public void setElements(Object[] elements) {
    
    
        this.elements = elements;
    }
    //压栈方法,obj表示被压入的元素
    public void push(Object obj){
    
    
        if (this.Index >= this.elements.length - 1){
    
    
            System.out.println("压栈失败,栈已满!");
            return;
        }
        //程序能走到这里,说明栈没满
        //向栈中加一个元素,栈帧向上移动一个位置
        Index++;
        elements[Index] = obj;
        System.out.println("压栈" + obj + "元素成功" + "栈帧指向" + Index);
    }
    //弹栈的方法,从数组中往外取元素。每取出一个元素栈帧向下移动一位
    public Object pop(){
    
    
        if(Index < 0){
    
    
            System.out.print("弹栈失败,栈已空");
            return null;
        }
        System.out.print("弹栈" + elements[Index] + "元素成功,");
        Index--;
        System.out.println("栈帧指向" + Index);
        return null;
    }
}
public class MyStackTest {
    
    
    public static void main(String[] args) {
    
    
        MyStack ms = new MyStack();
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.push(new Object());
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
        ms.pop();
    }
}

输出结果:
压栈java.lang.Object@74a14482元素成功栈帧指向0
压栈java.lang.Object@1540e19d元素成功栈帧指向1
压栈java.lang.Object@677327b6元素成功栈帧指向2
压栈java.lang.Object@14ae5a5元素成功栈帧指向3
压栈java.lang.Object@7f31245a元素成功栈帧指向4
压栈java.lang.Object@6d6f6e28元素成功栈帧指向5
压栈java.lang.Object@135fbaa4元素成功栈帧指向6
压栈java.lang.Object@45ee12a7元素成功栈帧指向7
压栈java.lang.Object@330bedb4元素成功栈帧指向8
压栈java.lang.Object@2503dbd3元素成功栈帧指向9
压栈失败,栈已满!
弹栈java.lang.Object@2503dbd3元素成功,栈帧指向8
弹栈java.lang.Object@330bedb4元素成功,栈帧指向7
弹栈java.lang.Object@45ee12a7元素成功,栈帧指向6
弹栈java.lang.Object@135fbaa4元素成功,栈帧指向5
弹栈java.lang.Object@6d6f6e28元素成功,栈帧指向4
弹栈java.lang.Object@7f31245a元素成功,栈帧指向3
弹栈java.lang.Object@14ae5a5元素成功,栈帧指向2
弹栈java.lang.Object@677327b6元素成功,栈帧指向1
弹栈java.lang.Object@1540e19d元素成功,栈帧指向0
弹栈java.lang.Object@74a14482元素成功,栈帧指向-1
弹栈失败,栈已空
需求2:
为某个酒店编写程序:
酒店房间管理系统,模拟订房、退房、打印所有房间状态等功能。
1.该系统的用户是:酒店前台;
2.酒店房间使用一个二维数组来模拟。“Room[][] rooms”
3.酒店中每一个房间应该是一个java对象:Room
4.每一个房间Room应该有:房间编号、房间类型、房间是否空闲
5.系统应该对外提供的功能:
可以预定房间:用户输入房间编号,订房;
可以退房:用户输入房间编号,退房;
可以查看所有房间状态:用户输入某个指令应该可以查看所有房间状态;
代码演示2:

public class HotelRoom {
    
    
    public static void main(String[] args) {
    
    
        Hotel hotel = new Hotel();
        System.out.println("欢迎使用天上人间大酒店前台管理系统");
        System.out.println("功能编号对应的功能:[1]查看房间列表,[2]订房,[3]退房,[0]退出系统");
        while(true){
    
    
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入功能编号:");
            int i = sc.nextInt();
            if (i == 1){
    
    
                hotel.print();
            }else if (i == 2){
    
    
                System.out.print("请输入订房编号:");
                int roomNum = sc.nextInt();
                hotel.RoomOrder(roomNum);
            }else if (i == 3){
    
    
                System.out.print("请输入退房编号:");
                int roomcheck = sc.nextInt();
                hotel.RoomChecking(roomcheck);
            }else if (i == 0){
    
    
                System.out.println("该系统正在退出");
            }else{
    
    
                System.out.println("您输入的功能编号不合法,请重新输入");
            }
        }
    }
}
class Room {
    
    
    //房间号
    private int RoomNum;
    //房间类型
    private String RoomType;
    //房间状态
    private boolean RoomStatus;
    //无参和有参构造
    public Room() {
    
    
    }
    public Room(int roomNum, String roomType, boolean roomStatus) {
    
    
        RoomNum = roomNum;
        RoomType = roomType;
        RoomStatus = roomStatus;
    }
    //setter and getter
    public int getRoomNum() {
    
    
        return RoomNum;
    }
    public void setRoomNum(int roomNum) {
    
    
        RoomNum = roomNum;
    }
    public String getRoomType() {
    
    
        return RoomType;
    }
    public void setRoomType(String roomType) {
    
    
        RoomType = roomType;
    }
    public boolean getRoomStatus() {
    
    
        return RoomStatus;
    }
    public void setRoomStatus(boolean roomStatus) {
    
    
        RoomStatus = roomStatus;
    }
    //重写toString方法
    public String toString() {
    
    
        //把一个变量塞到字符串当中的口诀:加一个双引号,双引号中间加两个加号,两个加号中间加变量名
        return "[" + RoomNum + "," + RoomType + "," + (RoomStatus ? "空闲" : "占用") + "]";
    }
    //重写equals方法
    public boolean equals(Object obj) {
    
    
        if (obj == null || !(obj instanceof Room)) {
    
    
            return false;
        }
        if (this == obj) {
    
    
            return true;
        }
        Room r = (Room) obj;
        return this.RoomNum == r.RoomNum && this.RoomType.equals(r.RoomType) && this.RoomStatus == r.RoomStatus;
    }
}
class Hotel {
    
    
    //定义二维数组,模拟所有酒店房间
    private Room[][] rooms;
    //现在的rooms是空,为了不为空,用构造方法
    public Hotel() {
    
    
        //动态二维数组,创建一个三层,每层十个房间的酒店
        rooms = new Room[3][10];
        //遍历动态二维数组
        for (int i = 0; i < rooms.length; i++) {
    
    
            for (int j = 0; j < rooms[i].length; j++) {
    
    
               if(i == 0){
    
    
                   //i == 0 表示:一楼
                   //让房间不为null,new对象
                   rooms[i][j] = new Room((i+1)*100+j+1,"单人间",true);
               }else if(i == 1){
    
    
                   rooms[i][j] = new Room((i+1)*100+j+1,"双人间",true);
               }else if (i == 2){
    
    
                   rooms[i][j] = new Room((i+1)*100+j+1,"VIP包间",true);
               }
            }
        }
    }
    public void print(){
    
    
        //打印所有房间状态,就是遍历二维数组
        for (int i = 0; i < rooms.length; i++) {
    
    
            for (int j = 0; j < rooms[i].length; j++) {
    
    
                System.out.print(rooms[i][j]);
            }
            //换行
            System.out.println();
        }
    }
    //预定房间,需要传递一个房间编号过来。订房就等于占用
    //最主要的是将RoomStatus房间状态修改为false
    //假设房间编号是207,下标是room[1][6]
    public void RoomOrder(int roomNum) {
    
    
        Room room = rooms[roomNum / 100 - 1][roomNum % 100 - 1];
        room.setRoomStatus(false);
        System.out.println(roomNum + "已订房");
    }

    //退房,就等于空闲
    public void RoomChecking(int roomNum) {
    
    
        Room room = rooms[roomNum / 100 - 1][roomNum % 100 - 1];
        room.setRoomStatus(true);
        System.out.println(roomNum + "已退房");
    }
}

输出结果:

欢迎使用天上人间大酒店前台管理系统
功能编号对应的功能:[1]查看房间列表,[2]订房,[3]退房,[0]退出系统
请输入功能编号:1
[101,单人间,空闲][102,单人间,空闲][103,单人间,空闲][104,单人间,空闲][105,单人间,空闲][106,单人间,空闲][107,单人间,空闲][108,单人间,空闲][109,单人间,空闲][110,单人间,空闲]
[201,双人间,空闲][202,双人间,空闲][203,双人间,空闲][204,双人间,空闲][205,双人间,空闲][206,双人间,空闲][207,双人间,空闲][208,双人间,空闲][209,双人间,空闲][210,双人间,空闲]
[301,VIP包间,空闲][302,VIP包间,空闲][303,VIP包间,空闲][304,VIP包间,空闲][305,VIP包间,空闲][306,VIP包间,空闲][307,VIP包间,空闲][308,VIP包间,空闲][309,VIP包间,空闲][310,VIP包间,空闲]
请输入功能编号:2
请输入订房编号:101
101已订房
请输入功能编号:3
请输入退房编号:102
102已退房
请输入功能编号:0
该系统正在退出

猜你喜欢

转载自blog.csdn.net/qq_55171059/article/details/113827508