在询问用户的输入时,我无法使用try catch获取代码。这是给定的作业:
巴士乘客座位计划编写一个程序来指派乘客 在公共汽车上的座位。假设一辆小型公共汽车的座位编号如下:
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中的所有变量。
答案 0 :(得分:0)
无法读取try catch中的所有变量
我猜你的意思是“我不能从try-catch外部引用我在try-catch中声明的变量。”
如果那是你的问题,那么在那个区块之外宣布它们,如下:
String name = null;
String seat = null;
try
{
// logic to determine name
name = ar[0];
seat = ar[1];
}
catch
{
e.printStackTrace(); // always put something in the catch
}
然后你可以引用那个块之外的变量。变量范围位于声明变量的块内;你可以在内部范围中使用变量,但不能在外部范围内使用。