展开全部
惨,写了一个多小时。
标题中说“写出座位号(1.0)这样格式”,我不是很理解,e68a84e8a2ad3231313335323631343130323136353331333433633961只能理解为选座位的时候需要输入正确的格式,格式为:[格式:(排.座),例如一排三座请输入(1.3)]。
连续售票状态就是进入售票后,售完一张票后可以继续售票,而不是退出程序或者返回主菜单,通过while(true)即可实现。连续退票状态也一样。
好了,上代码:
首先当然是座位初始化,这里定义了5排5座:
private static final int PAI = 5;//定义座位有几排
private static final int ZUO = 5;//定义每排有几座
private static String[][] seat = new String[PAI][ZUO];//定义5排5座的座位
座位初始化,因为你没有说空座位怎么表示,我就用“-”来表示空座位,将所有座位初始为空座位:
public static void main(String[] args) {
//初始化座位,空位用“-”表示
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
seat[i][j] = "-";
}
}
printSeat();//显示座位
先看一下显示座位方法:
/**
* 显示座位方法
*/
private static void printSeat() {
for (int i = 0; i < PAI; i++) {
System.out.print("|");
for (int j = 0; j < ZUO; j++) {
System.out.print(seat[i][j]);
}
System.out.println("|");
}
}
接着就是主菜单编写,都写了注释了应该不难理解:
Scanner in = new Scanner(System.in);
int input;
//主菜单连续运行状态
while (true) {
System.out.println("请选择操作方法(1-售票、2-退票、3-退出):");
input = in.nextInt();
if (input == 1) {//售票
saleSeat();
} else if (input == 2) {//退票
returnSeat();
} else if (input == 3) {//退出
System.out.println("退出系统");
System.exit(-1);
} else {//错误输入
System.out.println("输入错误,请选择操作方法(1-售票、2-退票、3-退出):");
}
}
}
售票方法:
/**
* 售票方法
*/
private static void saleSeat() {
Scanner in = new Scanner(System.in);
String input;
//售票方法连续工作状态
while (true) {
printSeat();//显示座位
System.out.println("\n请输入要购买的座位号[格式:(排.座),例如一排三座请输入(1.3)],输入[-1]返回主菜单:");
input = in.nextLine();
if ("-1".equals(input)) {//返回主菜单
break;
}
try {
//使用正则表达式“\D”截取字符串,(1.3)的截取结果为:{"","1","3"}
String tmp[] = input.split("\\D");
int pai = Integer.valueOf(tmp[1]) - 1;//取出输入的排号
int zuo = Integer.valueOf(tmp[2]) - 1;//取出输入的座号
System.out.println("所选的座位为[" + (pai + 1) + "]排[" + (zuo + 1) + "]座");
if ("-".equals(seat[pai][zuo])) {//当这个座位没有售卖时,卖出
seat[pai][zuo] = "*";
System.out.println("[" + (pai + 1) + "]排[" + (zuo + 1) + "]座已成功售出");
} else {
System.out.println("这个位置已经被人买了,换一个吧");
}
} catch (Exception e) {//捕获到异常,一般两种情况:座位号格式不对或者排号座号超过了定义的最大值
System.out.println("错误的座位号:" + input + "[格式:(排.座),例如一排三座请输入(1.3)]");
}
}
}
退票方法:
/**
* 退票方法
*/
private static void returnSeat() {
Scanner in = new Scanner(System.in);
String input;
while (true) {
printSeat();//显示座位
System.out.println("\n请输入要退回的座位号[格式:(排.座),例如一排三座请输入(1.3)],输入[-1]返回主菜单:");
input = in.nextLine();
if ("-1".equals(input)) {
break;
}
try {
//使用正则表达式“\D”截取字符串,(1.3)的截取结果为:{"","1","3"}
String tmp[] = input.split("\\D");
int pai = Integer.valueOf(tmp[1]) - 1;//取出输入的排号
int zuo = Integer.valueOf(tmp[2]) - 1;//取出输入的座号
System.out.println("待退的座位为[" + (pai + 1) + "]排[" + (zuo + 1) + "]座");
if ("*".equals(seat[pai][zuo])) {//当这个座位已经售卖时,才可以退回
seat[pai][zuo] = "-";
System.out.println("[" + (pai + 1) + "]排[" + (zuo + 1) + "]座已成功退回");
} else {
System.out.println("这个位置还没人买,无法退回");
}
} catch (Exception e) {//捕获到异常,一般两种情况:座位号格式不对或者排号座号超过了定义的最大值
System.out.println("错误的座位号:" + input + "[格式:(排.座),例如一排三座请输入(1.3)]");
}
}
}
运行结果:
主菜单:
选择售票,并购买2排4座:
继续购买5排5座:
再次购买5排5座:
返回主菜单:
选择退票并退1排1座:
退2排4座:
返回主菜单,退出:
以上。