目录
1、数组模拟栈数据结构
1.1 题目要求
1.2 代码呈现
1.3 问题展现
2、酒店管理系统
2.1 题目要求
2.2 代码呈现
2.3 问题展现
1、数组模拟栈数据结构 1.1 题目要求
1.2 代码呈现1)这个栈可以存储java中的任何引用类型的数据;
2)在栈中提供push方法模拟压栈;(栈满了,要有提示信息)
3)在栈中提供pop方法模拟压栈;(栈空了,要有提示信息)
4)编写测试程序,new栈对象,调用push pop方法来模拟压栈d栈 *** 作;
5)假设栈的默认初始化容量是10;
public class Text { public static void main(String[] args) { //创建一个栈对象,初始化容量是10个 Stack s = new Stack(); s.push("12345ty"); s.push(new Object()); s.push(new Object()); s.push(new Object()); s.push(new Object()); s.pop(); s.pop(); s.pop(); s.pop(); s.pop(); s.pop(); //可以使用for循环进行压栈和d栈 } } class Stack{ //存储任何引用类型数据的数组 private Object[] elements; //有参构造方法 public Stack(Object[] elements) { this.elements = elements; } //无参构造方法 public Stack() { //一维数组动态初始化 //默认初始化容量为10 this.elements = new Object[10]; } //栈帧(永远指向栈顶元素) private int index=-1; //压栈方法 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); } //d栈方法 public void pop(){ if(this.index <= -1) { System.out.println("栈内存已空,弹栈栈失败"); } else System.out.println(elements[index] + "元素,弹栈成功,栈帧指向" + --index); } //static实例变量的get方法 public Object[] getElements() { return elements; } //static实例变量的set方法 public void setElements(Object[] elements) { this.elements = elements; } //实例变量栈帧的get方法 public int getIndex() { return index; } //实例变量栈帧的set方法 public void setIndex(int index) { this.index = index; } }1.3 问题展现
1)为什么选择Object类型数组?
因为这个栈可以存储java中任何引用类型的数据
new Animal( )对象和new Peaple( )对象包括字符串都可以放进去,因为Animal和Peaple的超级费雷都是Object;
Object [ ] 是一个万能的口袋,这个口袋可以装任何引用数据类型的数据
2)关于字符串
字符串其实是一个字符串对象,但在java中字符串有优待,不需要new也是一个对象
String s = "asdfghj"; String s = new String("asdfghj");
3)关于set和get方法
在类中,大多采用封装机制,所以set和get方法有时候虽然用不到,但也需要写上
4)数组的初始化
数组的初始化可以在定义时直接初始化
this.elements = new Object [10];//赋值也是在构造方法调用的时候初始化
也可以在构造方法中初始化
public Stack() { this.elements = new Object[10]; }
5)关于System.out.println()方法
所有的System.out.println()方法在执行时,如果输出引用,自动调用引用的toString()方法
e.g.:System.out.println(obj + "元素,压栈成功");这里的obj其实调用了toString()方法
2、酒店管理系统 2.1 题目要求
2.2 代码呈现为某酒店编写程序:酒店管理程序,模拟订房、退房、打印所有房间状态等功能
1)该系统的用户是:酒店前台
2)酒店使用一个二维数组来模拟"Room[ ] [ ] rooms;"
3)酒店中的每一个房间应该是一个java对象:Room;
4)每一个房间Room应该有:房间编号、房间类型属性、房间是否为空;
5)系统对外提供的功能:
可以预定房间:用户输入房间编号,订房
可以退房:用户输入房间编号,退房;
可以查看所有房间的状态:用户输入某个指令应该可以查看所有房间的状态
import java.util.Scanner; public class HotelSystem { public static void main(String[] args) { //创建酒店对象 Hotel hotel = new Hotel(); Scanner s = new Scanner(System.in); Scanner roomNo = new Scanner(System.in); meau(); while(true){ int i = s.nextInt(); switch (i){ case 1: hotel.print();break; case 2: System.out.println("请输入预定的房间号"); hotel.order(roomNo.nextInt());break; case 3: System.out.println("请输入退订的房间号"); hotel.exit(roomNo.nextInt());break; case 0: return; } } } public static void meau(){ //欢迎页面 System.out.println("_____________________________________________________________________ "); System.out.println("**********************┍------------------------┑ *******************"); System.out.println("********************** 欢迎使用酒店管理系统 ********************"); System.out.println("**********************┕------------------------┙ *******************"); System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx菜单xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); System.out.println("===================================================================="); System.out.println("....... 1.查看房间 ...... 2.表示订房 ......."); System.out.println("....... 3.表示退房 ...... 0.退出系统 ......."); System.out.println("____________________________________________________________________"); System.out.println("请输入功能编号:"); } } class Room{ //房间号 private int no; //房间类型 private String type; //房间状态 private boolean status; //重写Object中的toString方法,返回一个含有三个信息的字符串 public String toString() { return "["+no+","+type+","+(status ? "空闲":"占用")+"]"; } //重写Object中的equals方法,若房间号相同则两个对象相同 public boolean equals(Object obj){ if(obj == null||!(obj instanceof Room)) return false; if(this == obj) return true; Room room = (Room)obj; return room.getNo()==this.no; } public Room(int no, String type, boolean status) { this.no = no; this.type = type; this.status = status; } public Room() { } public int getNo() { return no; } public String getType() { return type; } public boolean isStatus() { return status; } public void setNo(int no) { this.no = no; } public void setType(String type) { this.type = type; } public void setStatus(boolean status) { this.status = status; } } class Hotel { //二维数组模拟酒店房间 private Room[][] rooms; //通过构造方法来盖楼 public Hotel(){ //房间编号,房间类型,房间状态 rooms = new Room[3][10]; //创建30个对象,放到数组中 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); } } } } //在酒店对象上提供一个打印房间列表的方法 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(); } } //在酒店对象上提供一个订房的方法 public void order(int roomNo){ //最主要的是将房间状态修改为false Room room = rooms[roomNo / 100 -1][roomNo % 100-1]; if(room.isStatus()==false){ System.out.println("该房已被预定!请重新选择!"); return; } room.setStatus(false); System.out.println(roomNo + "已定房!"); } //在酒店对象上提供一个退房的方法 public void exit(int roomNo){ //最主要的是将房间状态修改为true Room room = rooms[roomNo / 100 -1][roomNo % 100-1]; if(room.isStatus()==true){ System.out.println("该房已被退订!"); return; } room.setStatus(true); System.out.println(roomNo + "已退房!"); } }2.3 问题展现
1)equals方法重写
equals是用来比较两个字符串对象是否相等的,至于怎么比较程序员自己决定;
你认为两个房间的编号相等就表示同一个房间,那么你写代码标记房间编号就行
2)toString方法重写
toString方法的目的是将java对象转换成字符串形式,怎么转,转成什么形式程序员自己定,可以重写后不转成内存地址
public String toString(){ //return "[101,单人间,占用]" //动态 return "["+no+","+type+","+(status ? "空闲":"占用")+"]" }
3)如何把一个变量塞到一个字符串当中,口诀:加一个双引号,双引号中间加两个加号,两个加号中间加变量名
"["+no+","+type+","+(status ? "空闲":"占用")+"]"
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)