2020.02.16
第十一次记录
今天跟着视频做了两道题,自己做不出来,只能作出一半,太打击信心了,但也要坚持,希望以后可以慢慢做出来吧。
**需求1:**
编写程序,使用一维数组,模拟栈数据结构。
要求:
1.这个栈可以存储java中的任何引用类型的数据。
2.在栈中提供push方法模拟压栈(栈满了要有提示信息)。
3.在栈中提供pop方法模拟弹栈(栈空了要有提示信息)。
4.编写测试程序,new栈对象,调用push、pop方法模拟压栈、弹栈动作。
5.假设栈的默认初始化容量是10(请注意无参数构造方法的编写方式)
**代码演示1:**
```java
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;
}
}
```
```java
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:**
```java
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 + "已退房");
}
}
```
输出结果:
```java
欢迎使用天上人间大酒店前台管理系统
功能编号对应的功能:[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
该系统正在退出
```
原文:https://www.cnblogs.com/wzd19901129/p/14407255.html