周末学习模拟压栈/弹栈以及酒店入住退房管理系统

185 阅读2分钟

压栈/弹栈最难懂的地方就是:

压栈方法:

public void push(Object obj){
    if(index >= this.elements.length){
        System.out.println("栈已满,压栈失败!");
    }
    index++;
    this.elements[index] = obj;//这是老师写的,我理解的是,obj[index]赋值给this.elements[index],而不是obj,obj是一个数组,而不是数组中的元素.所以我写的是:this.elements[index] = obj[index];
    System.out.println("数组中的第" + (index + 1) + "个元素已经压栈!");
}

至于弹栈,是这样的:

public void pop(){
    if(index < 0){
        System.out.println("栈已空,弹栈失败.");
    }
    System.out.println("数组中的第" + (index + 1) + "个元素已经弹栈!");
    index--;//这是用老师的方法加上我个人理解,其实这个方法只是输出了弹栈,数组中的元素本身还在,所以我在弹栈之前,加了一条this.elements[index] = null;
}

酒店入住系统,主要是考虑一个二维数组和房间号之间的关系,比如101.102.103..110

201.202.203..210

301.302.303..310

一共三层,数组就要这样:Room[][] rooms = new Room[3][10];

而rooms[0][0],对应的其实就是101,第一个下标为0,指向的楼层是1,即i+1,第二个下标为0,指向的是房号是1,即j+1,那么数组的下标所指向的房号就是(i+1)*100+j+1.

还有个要注意的地方是:toString()和equals()都要重写.toString()把自己想要输出的房间信息简洁明了的表示出来.equals把自己想要比较的过程和结果写出来,因为源码是直接用"=="比较,很容易出现与自己实际认知不符的情况.

toString()方法:

public String toString(){
    return "[" + this.getNo + this.getType + (this.getStatus ? "空闲" : "占用") + "]";
}

equals()方法,这里用的比较房间号一致就认为是同一个房间:

public boolean euqals(Object obj){
    if(obj == null || !(obj instanceof Room)){return false;}
    if(this == obj){return true;}
    Room room = (Room)obj;
    return this.no = room.getNo();
}

另外,在酒店入住时,输入房间号是207这样的,要倒推出它的二维数组下标,比如207是二楼7号,之前注意了楼层是二维数组第一个下标加1,房号是第二个下标加1,所以它的数组下标是:rooms[1][6].

这个小练习还不尽完善,比如说入住了的,在别的访客订房时会把先前入住的人赶出去,比如断电了就得全部重来,bug多多,主要也就是认识下二维数组.