• Java进阶(7)——数组模拟栈/酒店管理系统练习


    基础知识

    除了8个基础数据类型int/short/byte/long/char/float/double/boolean
    其他都是引用数据类型

    第一题:数据模拟栈

    编写程序,使用一维数组,模拟栈数据结构。
    要求:
    1、这个栈可以存储java中的任何引用类型的数据。
    2、在栈中提供push方法模拟压栈。(栈满了,提示)
    3、在栈中提供pop方法模拟弹栈。(栈空了,提示)
    4、编写测试程序,new栈对象,调用push pop方法模拟压栈动作。

    完整代码

    设置了一个索引index来控制栈帧的位置。

    public class MyStack{
        private Object[] elements;
        private int index;
    
        public MyStack() {
            this.elements = new Object[10];
            this.index = -1;
        }
    
        /*
            向栈中压元素
        */
        public void push(Object obj){
            if(index>= elements.length-1){
                System.out.println("压栈失败,栈已满!");
                return;
            }
            elements[++index] = obj;
            System.out.println("压栈成功!栈帧指向" + index);
            //所有sout方法执行时,如果输出引用的话,自动调用引用的toString()方法
        }
    
        /*
            从栈中取元素
        */
        public void pop(){
            if(index < 0){
                System.out.println("弹栈失败,栈已空!");
                return;
            }
            System.out.println("弹栈" + elements[index] + "元素成功");
            index --;
            System.out.println("栈帧指向" + index);
        }
    
        public Object[] getElements(){
            return elements;
        }
    
        public static void main(String[] args){
            MyStack stack = new MyStack();
            stack.push(4);
            stack.pop();
            stack.pop();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    输出

    压栈成功!栈帧指向0
    弹栈4元素成功
    栈帧指向-1
    弹栈失败,栈已空!
    
    • 1
    • 2
    • 3
    • 4

    第二题:酒店管理系统

    要求:为某个酒店编写程序:酒店管理系统,模拟订房、退房、打印所有房间状态等功能。
    1、该系统的用户是:酒店前台
    2、酒店中所有的房间使用一个二维数组来模拟。“Room[][] rooms;”
    3、酒店中的每一个房间应该是一个java对象:Room
    4、每一个房间Room应该有:房间编号、房间类型属性、房间是否空闲
    5、系统对外提供的功能:
    可以预定房间:用户输入房间编号、订房
    可以退房:用户输入房间编号、退房
    可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间状态。

    完整代码

    代码分为两个类,一个Hotel类一个Room类。Room类定义了房间的基本信息,房间编号、房间类型属性、房间是否空闲。Hotel定义了一个二维数组存放房间,提供了order(预定),exit(退房)等功能。

    import javafx.scene.transform.Scale;
    
    import java.util.Scanner;
    
    public class Hotel {
        private Room[][] rooms;
        public Hotel(){
            rooms = new Room[3][10];//3行10列。三层楼每层十个房间。
            for(int i = 0;i<rooms.length;i++){
                for(int j = 0;j<rooms[i].length;j++){
                    if(i == 0){
                        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,"总统套房",true);
                    }
                }
            }
    
    
        }
    
        void print(){
            for(int i = 0;i<rooms.length;i++){
                for(int j = 0;j<rooms[i].length;j++){
                    Room room = rooms[i][j];
                    System.out.println(room);
                }
                System.out.println();
            }
        }
    
    
        /*
        * 订房方法
        * 调用此方法时需要传递一个房间编号
        */
    
        public void order(int roomNo){
            //订房最主要的是将房间对象的status修改为false
            //Room对象的status修改为false
            //假设房间编号207,下标是rooms[1][6]
            Room room = rooms[roomNo/100 - 1][roomNo%100 - 1];
            room.setStatus(false);//修改为占用
        }
    
        /*
         * 退房
         * @#param roomNo
         */
        public void exit(int roomNo){
            Room room = rooms[roomNo/100 - 1][roomNo %100 -1];
            //修改为空闲
            room.setStatus(true);
        }
    
    
        public static void main(String[] args) {
            Hotel hotel = new Hotel();
    //        hotel.print();
    
            System.out.println("欢迎使用酒店管理系统,请认真阅读以下使用说明");
            System.out.println("请输入对应的功能编号:[1]查看房间列表。[2]表示订房。[3]表示退房。[4]表示退出");
            Scanner s = new Scanner(System.in);
    
            while(true){
                System.out.println("请输入功能编号:");
                int i = s.nextInt();
                if(i == 1){
                    hotel.print();
                }else if(i == 2){
                    System.out.println("请输入订房编号:");
                    int roomNo = s.nextInt();
                    hotel.order(roomNo);
                }else if(i == 3){
                    System.out.println("请输入退房编号:");
                    int roomNo = s.nextInt();
                    hotel.exit(roomNo);
                }else if (i == 0){
                    System.out.println("再见!欢迎下次再来!");
                    return;
                }else{
                    //出错了!!
                    System.out.println("您的输入有误,请重新输入");
                }
            }
        }
    }
    class Room{
        private int no;
        /*
         * 房间类型:标准间 单人间 总统套房
         */
        private String type;
        /*
         * 房间状态
         * true表示空闲,房间可以背锁定。
         * false表示占用,房间不能被预定。
         */
    
        public Room(int no, String type, boolean status) {
            this.no = no;
            this.type = type;
            this.status = status;
        }
    
        private boolean status;
    
        public int getNo() {
            return no;
        }
    
        public void setNo(int no) {
            this.no = no;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public boolean isStatus() {
            return status;
        }
    
        public void setStatus(boolean status) {
            this.status = status;
        }
    
        @Override
        public String toString() {
            return "["+no+","+type+","+(status?"空闲" : "占用")+"]";
            //把一个变量塞到一个字符串当中,口诀:加一个双引号,双引号中间加两个加号,两个加号中间加变量名。
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139

    输出

    欢迎使用酒店管理系统,请认真阅读以下使用说明
    请输入对应的功能编号:[1]查看房间列表。[2]表示订房。[3]表示退房。[4]表示退出
    请输入功能编号:
    1
    [101,房间类型,空闲]
    [102,房间类型,空闲]
    [103,房间类型,空闲]
    [104,房间类型,空闲]
    [105,房间类型,空闲]
    [106,房间类型,空闲]
    [107,房间类型,空闲]
    [108,房间类型,空闲]
    [109,房间类型,空闲]
    [110,房间类型,空闲]
    
    [201,标准间,空闲]
    [202,标准间,空闲]
    [203,标准间,空闲]
    [204,标准间,空闲]
    [205,标准间,空闲]
    [206,标准间,空闲]
    [207,标准间,空闲]
    [208,标准间,空闲]
    [209,标准间,空闲]
    [210,标准间,空闲]
    
    [301,总统套房,空闲]
    [302,总统套房,空闲]
    [303,总统套房,空闲]
    [304,总统套房,空闲]
    [305,总统套房,空闲]
    [306,总统套房,空闲]
    [307,总统套房,空闲]
    [308,总统套房,空闲]
    [309,总统套房,空闲]
    [310,总统套房,空闲]
    
    请输入功能编号:
    2
    请输入订房编号:
    201
    请输入功能编号:
    1
    [101,房间类型,空闲]
    [102,房间类型,空闲]
    [103,房间类型,空闲]
    [104,房间类型,空闲]
    [105,房间类型,空闲]
    [106,房间类型,空闲]
    [107,房间类型,空闲]
    [108,房间类型,空闲]
    [109,房间类型,空闲]
    [110,房间类型,空闲]
    
    [201,标准间,占用]
    [202,标准间,空闲]
    [203,标准间,空闲]
    [204,标准间,空闲]
    [205,标准间,空闲]
    [206,标准间,空闲]
    [207,标准间,空闲]
    [208,标准间,空闲]
    [209,标准间,空闲]
    [210,标准间,空闲]
    
    [301,总统套房,空闲]
    [302,总统套房,空闲]
    [303,总统套房,空闲]
    [304,总统套房,空闲]
    [305,总统套房,空闲]
    [306,总统套房,空闲]
    [307,总统套房,空闲]
    [308,总统套房,空闲]
    [309,总统套房,空闲]
    [310,总统套房,空闲]
    
    请输入功能编号:
    3
    请输入退房编号:
    201
    请输入功能编号:
    1
    [101,房间类型,空闲]
    [102,房间类型,空闲]
    [103,房间类型,空闲]
    [104,房间类型,空闲]
    [105,房间类型,空闲]
    [106,房间类型,空闲]
    [107,房间类型,空闲]
    [108,房间类型,空闲]
    [109,房间类型,空闲]
    [110,房间类型,空闲]
    
    [201,标准间,空闲]
    [202,标准间,空闲]
    [203,标准间,空闲]
    [204,标准间,空闲]
    [205,标准间,空闲]
    [206,标准间,空闲]
    [207,标准间,空闲]
    [208,标准间,空闲]
    [209,标准间,空闲]
    [210,标准间,空闲]
    
    [301,总统套房,空闲]
    [302,总统套房,空闲]
    [303,总统套房,空闲]
    [304,总统套房,空闲]
    [305,总统套房,空闲]
    [306,总统套房,空闲]
    [307,总统套房,空闲]
    [308,总统套房,空闲]
    [309,总统套房,空闲]
    [310,总统套房,空闲]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
  • 相关阅读:
    Java测试、反射、注解
    将矩阵按对角线排序(c++题解)
    无代码平台单项选择入门教程
    Python异常捕获
    《认知驱动》读后感:从输入到输出
    java基于SpringBoot+Vu的疫情防控外出返乡行程管理系统 element 前后端分离
    手机提词器有哪些?简单介绍这一款
    数字图像基础
    MySQL之导入导出&视图&索引&执行计划
    Spring观察者模式 - 事件监听机制(发布订阅模式)
  • 原文地址:https://blog.csdn.net/qq_16488989/article/details/126067383