【发布时间】:2015-07-17 21:56:56
【问题描述】:
在询问用户输入时,我无法使用 try catch 使我的代码正常工作。这是给定的作业:
BUS PASSENGER SEAT PROGRAM 编写程序来分配乘客 公共汽车的座位。假设一辆小型巴士,座位编号如下:
1 A B C D 2 A B C D 3 A B C D 4 A B C D 5 A B C D 6 A B C D 7 A B C D 8 A B C D 程序应显示座位 图案,带有一个指示器(例如 X)已经标记了座位 分配的。例如,在座位 1A、2B 和 4C 被占用后, 显示应如下所示: 1 X B C D 2 A X C D 3 A B C D 4 A B X D 5 A B C D 6 A B C D 7 A B C D 8 A B C D
显示可用座位后,程序提示设置 需要时,用户键入一个座位,然后显示可用的 席位已更新。这种情况一直持续到所有座位都被填满或直到 用户发出程序应该结束的信号。如果用户输入 已经分配的座位,程序应该说座位是 占领并要求另一种选择。程序输出票据 用户在文本文件和 UI 中预订了以下详细信息: :该程序也能够接受 一个输入文本文件,其中包含上述详细信息并确定是否 文本文件上的座位号内容是否已被占用。 同样,预订座位的摘要与乘客一起 名称可以在 UI 和另一个文本文件中查看。 抱歉乱放,我好像不能换行。
到目前为止,这是我的代码:
package busticket;
import java.util.*;
import java.io.*;
public class BusTicket {
public static void printArray(char[][] Ticket) {
for (int i = 0; i < Ticket.length; i++) {
System.out.println((i + 1) + " " +
Ticket[i][0] + " " + Ticket[i][1] + " " +
Ticket[i][2] + " " + Ticket[i][3]);
}
}
public static void main(String[] args) {
Scanner get = new Scanner(System.in);
PrintWriter a;
String f;
char Again;
char[][] Ticket = new char[8][4];
System.out.println("Hello Sir/Ma'am here is the list of the available seats:");
for (int i = 0; i < 8; i++) {
Ticket[i][0] = 'A';
Ticket[i][1] = 'B';
Ticket[i][2] = 'C';
Ticket[i][3] = 'D';
}
printArray(Ticket);
int counter = 0;
do {
do {
System.out.println("Press 1 for Manual input.");
System.out.println("Press 2 for Text input.");
int Choice = get.nextInt();
if (Choice == 1) {
get.nextLine();
System.out.println("Please enter your name: ");
String name = get.nextLine();
System.out.println("Please enter your desired seat. (ex: 1A).");
String seat = get.nextLine();
int row = seat.charAt(0) - '1';
int column = seat.charAt(1) - 'A';
if (row < 0 || row > 8 || column < 0 || column > 4) {
System.out.println("Wrong input.");
} else {
if (Ticket[row][column] != 'X') {
Ticket[row][column] = 'X';
printArray(Ticket);
System.out.println("Reserved:" + name + "-" + seat);
try {
a = new PrintWriter(new FileWriter("output.txt", true));
a.write(String.format(name));
a.write("-");
a.write(String.format(seat));
a.write("\n");
a.close();
} catch (IOException e) {
e.printStackTrace();
}
counter++;
} else {
System.out.println("THAT SEAT IS TAKEN!!!");
}
}
} else if (Choice == 2) {
get.nextLine();
try {
String str;
Scanner g = new Scanner(new File("input.txt"));
while ((str = g.nextLine()) != null) {
String[] ar = str.split("-");
String name = ar[0];
String seat = ar[1];
}
} catch (Exception e) {
}
int row = seat.charAt(0) - '1';
int column = seat.charAt(1) - 'A';
if (row < 0 || row > 8 || column < 0 || column > 6) {
System.out.println("Wrong input.");
} else {
if (Ticket[row][column] != 'X') {
Ticket[row][column] = 'X';
printArray(Ticket);
System.out.println("Reserved:" + name + "-" + seat);
try {
a = new PrintWriter(new FileWriter("output.txt", true));
a.write(String.format(name));
a.write("-");
a.write(String.format(seat));
a.write("\n");
a.close();
} catch (IOException e) {
e.printStackTrace();
}
counter++;
} else {
System.out.println("THAT SEAT IS TAKEN!!!");
}
}
}
do {
System.out.print("\nReserve again? Press Y to Reserve again. Press N to exit and print the receipt.(Y/N): ");
Again = get.next().charAt(0);
Again = Character.toUpperCase(Again);
get.nextLine();
} while ((Again != 'Y') && (Again != 'N'));
} while (Again == 'Y');
if (Again == 'N' || Again == 'n') {
try {
Scanner d = new Scanner(new File("output.txt"));
while ((f = d.nextLine()) != null) {
System.out.println("Reserved:");
System.out.println(f);
}
} catch (Exception e) {
}
System.exit(0);
}
} while (counter < 32);
}
}
我的问题是第二个选择。 这部分:
else if (Choice==2){
get.nextLine();
try {
String str;
Scanner g = new Scanner (new File("input.txt"));
while ((str = g.nextLine()) != null){
String[] ar=str.split("-");
String name=ar[0];
String seat=ar[1];
}
}catch (Exception e){}
如何在不破坏代码逻辑的情况下让我的代码读取 String 名称并位于 try catch 中? try catch 内的所有变量都无法读取。
【问题讨论】:
-
如果您将代码缩小到相关的代码行,并在询问时提供更多信息,您将获得更多成功。
-
对于这个项目,只需在类的顶部声明
String name和String seat。将来,您可能希望将它们封装在一个对象中,并将类分解为使用/返回对象的方法。