1.前期知识储备,二维数组
- 二维数组时特殊的一维数组,特殊在这个一位数组的每一个元素都是一个一维数组.
- 二维数组静态初始化
int[][] a={{100,200,300},{1,5,6,8},{0}};
a[0].length为二维数组中第一个一维数组的长度。
可以采用sum(new int[][] {{1,2,3},{1,6}};
关于二维数组的读取和更改
取上述维数组的第一个一维数组。
int[] b = a[0];
第一个一维数组的第一个元素:a[0] [0];
a[0]是一个整体,后面的[0]是前面执行结束的结构然后再寻下标。 - 更改直接赋值。
二维数组的遍历采用两个for循环。
for(int i =0 ;i<array.length,i++)
for(int j=0;j<array[i].length.j++) - 动态初始化二维数组
//以下为三个一维数组,每个一维数组当中4个元素。 - int[][] array = new int[3][4];
- 函数的二维数组形参书写格式:
sum(int [][] arragy);
定义为Object数组,所有引用类型都可以存储。定义其它类则它和其子类也可以存储。注意字符串也是Java对象,属于String类,切勿特殊化。
如:Object[] arr = {new Husband(),new wife(),“abc”};
快速查找类:在IDEA中双击shift寻找类。
(小练习,走起)
2.一位数组模拟栈
- 使用一维数组怎么模拟栈?(栈满和栈空需提供提示)
package package2;
public class Zhan {
private Object[] elements=new Object[10];
private int top=-1;
public Zhan(){
}
//压栈
public void push(Object obj){
if(this.top>=this.elements.length-1) {
System.out.println("栈满");
return;
}
this.elements[++top]=obj;
System.out.println("压栈"+obj+"成功"+top);
}
// 弹栈
public void pop() {
if(top<0) {
System.out.println("弹栈失败,栈已空");
}
System.out.println("弹栈"+elements[top--]+"元素成功");
System.out.println("栈帧指向"+top);
}
public Object[] getElements() {
return elements;
}
public void setElements(Object[] elements) {
this.elements = elements;
}
public int getTop() {
return top;
}
public void setTop(int top) {
this.top = top;
}
}
package package2;
public class Test10{
public static void main(String[] args) {
// 创建一个栈对象
Zhan aa = new Zhan();
// 压栈
for(int i=0;i<4;i++)
aa.push(new Object());
aa.pop();
}
}
3.酒店管理系统
-
要求:编写程序,为某个酒店提供管理系统,模拟订房,退房,打印所有房间状态等功能。
-
用户是酒店前台,房间号采用二维数组模拟,每一个房间为一个对象,对外提供预定,退房,房间状态等。
-
next()为读取下一字符串。
-
nextLine()为读取一整行数据
-
在IDEA中快速定位属性和方法:Ctrl+F12
-
Ctrl+shift+/
-
写每个类时需要重写toString和equals方法,这是一个好的习惯,不管是否用的着(默认继承Object类中的方法)
-
输出引用时会自动调用toString方法。
-
public String toString(){
return “[102,单人间,空闲]”;
} -
pubic boolean equals(Object obj){
if(boj = =null)||!(obj instanceof Room))
return false;
if(this = =obj)retun true;
Room room= =(Room)boj;//向下转型
return this.getNum()= =room.getNum();
} -
二维数组中行数的长度用rooms.length表示。
-
二维数组的列数的长度用rooms[i].length表示。
-
同一个类中不同的类使用Scanner类的方法时,将Scanner的引用以参数的形式传过去就好。
-
酒店拥有者类
package package2;
import java.util.*;
public class QianTai {
private static Customers[] dd = new Customers[10000];
/**
*
*/
public QianTai() {
super();
}
public Customers[] getDd() {
return dd;
}
//添加顾客的方法
public static void addCustomers(Scanner sc) {
int i=0;
i++;
int count =i;
dd[count]=new Customers();
System.out.println("请输入顾客姓名:");
dd[count].setName(sc.next());
System.out.println("请输入顾客联系方式:");
dd[count].setNumber(sc.next());
System.out.println("请输入顾客要充值的数额:");
dd[count].setYuE(sc.nextDouble());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// 房间
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
Hotel aa=new Hotel();
for(int i=0;i<10;i++)
for(int j=0;j<30;j++) {
if(i<5)
aa.Rooms[i][j]=new Room("大床房","空房",300);
else
aa.Rooms[i][j]=new Room("标准间","空房",300);
}
while(true) {
System.out.println("=======欢迎使用酒店管理系统!==========");
System.out.println("[1]查询所有房间状况!\n[2]定房间!");
System.out.println("[3]顾客退房!\n[4]注册vip会员\n[5]退出系统!");
System.out.println("请输入相应功能编号:");
int flag =sc.nextInt();
switch(flag) {
case 1:aa.OutPut();break;
case 2:aa.YuDing(sc);break;
case 3:aa.TuiFang(sc);break;
case 4:addCustomers(sc);break;
case 5:System.out.println("退出系统成功,祝你生意兴融!");return;
default:
System.out.println("对不起你输入的功能编号有误,请重新输入!");
}
}
}
}
- 顾客类
package package2;
public class Customers {
private String name;
private String number;
private double YuE;
/**
* @param name
* @param number
* @param yuE
*/
public Customers(String name, String number, double yuE) {
super();
this.name = name;
this.number = number;
YuE = yuE;
}
/**
*
*/
public Customers() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public double getYuE() {
return YuE;
}
public void setYuE(double yuE) {
YuE = yuE;
}
}
- 房间类
package package2;
public class Room extends Hotel {
private String Leixing;
private String ZhuangTai;
private double price;
/**
* @param leixing
* @param zhuangTai
* @param price
*/
public Room(String leixing, String zhuangTai, double price) {
super();
Leixing = leixing;
ZhuangTai = zhuangTai;
this.price = price;
}
public String getLeixing() {
return Leixing;
}
public void setLeixing(String leixing) {
Leixing = leixing;
}
public String getZhuangTai() {
return ZhuangTai;
}
public void setZhuangTai(String zhuangTai) {
ZhuangTai = zhuangTai;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
- 酒店类
package package2;
import java.util.*;
public class Hotel {
Room[][] Rooms=new Room[10][30];
public Hotel() {
super();
}
public Room[][] getRooms() {
return Rooms;
}
public void setRooms(Room[][] rooms) {
Rooms = rooms;
}
/**
* @param rooms
*/
public Hotel(Room[][] rooms) {
super();
Rooms = rooms;
}
// 预定方法
public void YuDing(Scanner Scan) {
System.out.println("请输入要预定的房间楼层:");
int Ceng = Scan.nextInt();
System.out.println("请输入你要预定的房间号:");
int Hao = Scan.nextInt();
if(Ceng>10||Ceng<0||Hao>30||Hao<0) {
System.out.println("对不起,没有此房间哦!");
return;
}
else if("空房".equals(Rooms[Ceng-1][Hao-1].getZhuangTai())) {
System.out.println("预定成功,欢迎入住!房间密码为:"+"0096"+(Ceng-1)+(Hao-1)+"请注意保管密码!");
Rooms[Ceng-1][Hao-1].setZhuangTai("房满");
}
else
System.out.println("预定失败,该房间已被订购,请选择其它房间吧!");
}
// 退房方法
public void TuiFang(Scanner Scan) {
System.out.println("请输入要退订的房间楼层:");
int Ceng = Scan.nextInt();
System.out.println("请输入你要退订的房间号:");
int Hao = Scan.nextInt();
if(Ceng>10||Ceng<0||Hao>30||Hao<0) {
System.out.println("对不起,没有此房间哦!");
return;
}
else if("房满".equals(Rooms[Ceng-1][Hao-1].getZhuangTai())) {
System.out.println("退订成功,欢迎下次入住酒店!");
Rooms[Ceng-1][Hao-1].setZhuangTai("空房");
}
else
System.out.println("退订失败,该房间没住客人哦!");
}
// 所有房间状态
public void OutPut() {
for(int i=0;i<10;i++)
for(int j=0;j<30;j++) {
System.out.println((i+1)+"楼"+" 房间号为"+(j+1));
System.out.println(Rooms[i][j].getLeixing()+" "+Rooms[i][j].getZhuangTai()+" "+Rooms[i][j].getPrice()+"元");
System.out.println();
}
}
}
待改进之处
程序退出或者断电后数据不能保存,大家可以用数据库自己实现一下,或者用文件;另一缺点交互性差,可以用UI实现一些以上代码!