使用文本文件

时间:2015-05-07 11:01:07

标签: java file input io

在询问用户的输入时,我无法使用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中的所有变量。

1 个答案:

答案 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
}

然后你可以引用那个块之外的变量。变量范围位于声明变量的块内;你可以在内部范围中使用变量,但不能在外部范围内使用。