目录

Java数组的练习


Java数组的练习

使用一维数组,模拟栈数据结构。

public class Test {
    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(new Object());
        myStack.push(new Object());
        System.out.println(myStack.pop());
    }
}
class MyStack{
    // 为什么选择Object类型数组?因为这个栈可以存储java中的任何引用类型的数据,因为所有类的父类是Object。
    // 包括String也可以存储进去。因为String父类也是Object。
    // 一维数组动态初始化,默认初始化容量是10.
    private Object[] elements = new Object[10];
    // 栈帧,永远指向栈顶部元素
    // 那么这个默认初始值应该是多少。注意:最初的栈是空的,一个元素都没有。
    // private int index = 0; // 如果index采用0,表示栈帧指向了顶部元素的上方。
    // private int index = -1; // 如果index采用-1,表示栈帧指向了顶部元素。
    // 给index初始化
    private int index = -1;
    public void push(Object obj){
        if(this.index >= this.elements.length-1){
            System.out.println("压栈失败,栈已满!");
            return;
        }
        // 程序能够走到这里,说明栈没满
        // 向栈中加1个元素,栈帧向上移动一个位置。
        this.elements[++index] = obj;
        // 在声明一次:所有的System.out.println()方法执行时,如果输出引用的话,自动调用引用的toString()方法。
        System.out.println("压栈" + obj + "元素成功,栈帧指向" + index);
    }
    public Object pop(){
        if(this.index < 0){
            System.out.println("弹栈失败,栈已空!");
            return null;
        }
        // 程序能够执行到此处说明栈没有空。
        System.out.print("弹栈" + elements[index] + "元素成功,");
        // 栈帧向下移动一位。
        this.index--;
        System.out.println("栈帧指向" + index);
        return elements[index];
    }
}

实现一个简单的酒店管理系统

Room

public class Room {
    private int no;
    private String type;
    private boolean status;
    public Room(){super();};
    public Room(int no, String type, boolean status){
        super();
        this.no = no;
        this.type = type;
        this.status = status;
    }
    public int getNo(){
        return this.no;
    }
    public String getType(){
        return this.type;
    }
    public void setStatus(boolean status){
        this.status = status;
    }
    public boolean getStatus(){
        return this.status;
    }

    @Override
    public String toString() {
        return "["+"房间号"+this.getNo()+","+"房间类型"+this.getType()+","+"状态"+(this.getStatus()?"空闲":"占用")+"]";
    }
}

Hotel

public class Hotel {
    // 酒店对象,酒店中有二维数组,二维数组模拟大厦。
    private Room[][] rooms;
    // 盖楼通过构造方法来盖楼。
    public Hotel(){
        super();
        // 动态初始化
        rooms = new Room[3][4];
        // 创建12个Room对象,放到数组当中。
        for (int i = 0; i < this.rooms.length; i++) {
            for (int j = 0; j < this.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);
                }
            }
        }
    }
    public void printRoomStatus(){
        for (int i = 0; i < this.rooms.length; i++) {
            for (int j = 0; j < this.rooms[i].length; j++) {
                Room room = this.rooms[i][j];
                System.out.print(room);
            }
            System.out.println();
        }
    }
    public void order(int roomNo){
        Room room = this.rooms[roomNo / 100 - 1][roomNo % 100 - 1];
        // 修改为占用。
        room.setStatus(false);
        System.out.println(roomNo + "已订房!");
    }
    public void exit(int roomNo){
        Room room = this.rooms[roomNo / 100 - 1][roomNo % 100 - 1];
        // 修改为空闲。
        room.setStatus(true);
        System.out.println(roomNo + "已退房!");
    }
}

Test

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        System.out.println("功能编号对应的功能:[1]表示查看房间列表。[2]表示订房。[3]表示退房。[0]表示退出系统。");
        Hotel hotel = new Hotel();
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.print("请输入功能编号:");
            int input = scanner.nextInt();
            if(input == 1){
                hotel.printRoomStatus();
            }else if(input == 2){
                System.out.print("请输入订房编号:");
                int roomId = scanner.nextInt();
                hotel.order(roomId);
            }else if(input == 3){
                System.out.print("请输入退房编号:");
                int roomId = scanner.nextInt();
                hotel.exit(roomId);
            }else if(input == 0){
                System.out.println("再见,欢迎下次再来!");
                return;
            }else {
                System.out.println("输入功能编号有误,请重新输入!");
            }
        }
    }
}