3

好的,关于我正在编写的程序的另一个问题,称为“飞行”。在我的测试器中,我正在从名为 myFlight 的 Flight 类创建一个对象。该对象有几个字段(航班名称、行驶里程等),但我正在做的是从名为 input.txt 的文件中读取数据并尝试将其放入我创建的对象中。我正在阅读的文件有五行信息。由于某种原因,我不能完全正确,如果有人可以帮助我解决这个问题,我将不胜感激。

这是包含我的 Flight 类中所有字段的构造函数:

 public Flight(String name, int num, int miles, String origin, String destination)
  {
    Airlinename = name;
    flightnumber = num;
    numofmiles = miles;
    Origincity = origin;
    Destinationcity = destination;
  }

以及我创建对象并尝试从文件中读取数据的程序部分。我也在我的类中创建了一个空白构造函数,因为我不确定在创建对象时是否应该在对象中放入任何东西。

Flight myFlight = new Flight();

    File myFile = new File("input.txt");
    Scanner inputFile = new Scanner(myFile);

    while (inputFile.hasNext())
    {
      myFlight = inputFile.nextLine();
    }

    inputFile.close();
  }
}
4

4 回答 4

1

万一您使用特殊字符,您需要修改您的程序,以便您可以正确阅读它们。

Scanner inputFile = new Scanner(myFile, "UTF-8");

另一方面,如果文本文件包含以下内容,则可能后续调用会nextInt()生成运行时异常。

Gran España
1
1001
New York
Los Angeles

如果是这样的话,读数应该是不同的。

myFlight = new Flight(inputFile.nextLine(), 
           Integer.parseInt(inputFile.nextLine()), 
           Integer.parseInt(inputFile.nextLine()), 
           inputFile.nextLine(), 
           inputFile.nextLine());

与任何程序一样,当添加更多条件来改进模型时,它需要越来越多的代码。

祝你好运。

于 2012-05-07T23:41:57.083 回答
0

尝试

myFlight = new Flight(inputFile.next(), inputFile.nextInt(), 
           inputFile.nextInt(), inputFile.next(), inputFile.next());
于 2012-05-07T23:13:31.933 回答
0

您不能直接将字符串行分配给对象,您需要将行解析为部分并为变量一一赋值。

于 2012-05-07T23:17:37.993 回答
0

您的输入文本是如何组织的?Scanner 的nextLine()方法返回一个 String 对象,绝对不能将它分配给 Flight 类型。有不同的方法可以在 Scanner 中获取不同的值,例如nextInt(), nextFloat().

基本上你可以这样尝试

Flight myFlight = new Flight();
myFlight.setFlightName(inputFile.next());
myflight.setMiles(inputFile.nextInt();

等等

这只是一个示例,您需要检查 input.txt 文件中的格式。

于 2012-05-07T23:20:19.943 回答