【问题标题】:Get input from user using a text file使用文本文件从用户那里获取输入
【发布时间】: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 nameString seat。将来,您可能希望将它们封装在一个对象中,并将类分解为使用/返回对象的方法。

标签: java file input io


【解决方案1】:

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
}

然后您可以引用该块之外的变量。变量范围在声明变量的块内;您可以在内部范围内使用该变量,但不能在外部范围内使用。

【讨论】:

  • 非常感谢!像魅力一样工作:-0
猜你喜欢
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 2019-04-11
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
相关资源
最近更新 更多