展开全部

惨,写了一个多小时。

标题中说“写出座位号(1.0)这样格式”,我不是很理解,e68a84e8a2ad3231313335323631343130323136353331333433633961只能理解为选座位的时候需要输入正确的格式,格式为:[格式:(排.座),例如一排三座请输入(1.3)]。

连续售票状态就是进入售票后,售完一张票后可以继续售票,而不是退出程序或者返回主菜单,通过while(true)即可实现。连续退票状态也一样。

好了,上代码:

首先当然是座位初始化,这里定义了5排5座:

java 给固定人数分配座位保证是前后座 java选座位的代码_字符串

private static final int PAI = 5;//定义座位有几排

private static final int ZUO = 5;//定义每排有几座

private static String[][] seat = new String[PAI][ZUO];//定义5排5座的座位

座位初始化,因为你没有说空座位怎么表示,我就用“-”来表示空座位,将所有座位初始为空座位:

java 给固定人数分配座位保证是前后座 java选座位的代码_初始化_02

public static void main(String[] args) {

//初始化座位,空位用“-”表示

for (int i = 0; i < 5; i++) {

for (int j = 0; j < 5; j++) {

seat[i][j] = "-";

}

}

printSeat();//显示座位

先看一下显示座位方法:

java 给固定人数分配座位保证是前后座 java选座位的代码_初始化_03

/**

* 显示座位方法

*/

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("|");

}

}

接着就是主菜单编写,都写了注释了应该不难理解:

java 给固定人数分配座位保证是前后座 java选座位的代码_System_04

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-退出):");

}

}

}

售票方法:

java 给固定人数分配座位保证是前后座 java选座位的代码_System_05

/**

* 售票方法

*/

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)]");

}

}

}

退票方法:

java 给固定人数分配座位保证是前后座 java选座位的代码_java考试座位号_06

/**

* 退票方法

*/

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)]");

}

}

}

运行结果:

主菜单:

java 给固定人数分配座位保证是前后座 java选座位的代码_字符串_07

选择售票,并购买2排4座:

java 给固定人数分配座位保证是前后座 java选座位的代码_System_08

继续购买5排5座:

java 给固定人数分配座位保证是前后座 java选座位的代码_字符串_09

再次购买5排5座:

java 给固定人数分配座位保证是前后座 java选座位的代码_java考试座位号_10

返回主菜单:

java 给固定人数分配座位保证是前后座 java选座位的代码_java考试座位号_11

选择退票并退1排1座:

java 给固定人数分配座位保证是前后座 java选座位的代码_System_12

退2排4座:

java 给固定人数分配座位保证是前后座 java选座位的代码_java考试座位号_13

返回主菜单,退出:

java 给固定人数分配座位保证是前后座 java选座位的代码_字符串_14

以上。