-1

我有一个带有抽象类“订单”的程序,其中三个不同的类实现了它,当我用硬编码的订单测试它时,程序中的所有内容都运行良好。

这是抽象类:

public abstract class Order {
protected String location;
protected double price;

public Order(double price, String location){
    this.price = price;
    this.location = location;
}

public abstract double calculateBill();

public String getLocation() {
    return location;
}

public double getPrice() {
    return price;
}

public abstract String printOrder(String format);

}

这是供参考的实现类之一

public class NonProfitOrder extends Order {

public NonProfitOrder(double price, String location) {
    super(price, location);
}

public double calculateBill() {
    return getPrice();
}

public String printOrder(String format){
    String Long = "Non-Profit Order" + "\nLocation: " + getLocation() +  "\nTotal Price: " + getPrice();
    String Short = "Non-Profit Order-Location: " + getLocation() + ", " + "Total Price: " + getPrice();
    if (format.equals("Long")){
        return Long;
    }
    else{
        return Short;
    }
}
}

到目前为止,这是我为测试人员所拥有的,我知道这是错误的并且非常混乱,但请放轻松。我一直在四处寻找工作,但没有运气。

public static ArrayList<Order> readOrders (String fileName) throws FileNotFoundException{
    String type;
    Scanner s = new Scanner(new File("orders.txt"));
    ArrayList<Order> orders = new ArrayList<Order>();
    while (s.hasNext()){
        type = s.nextLine();
    }
    switch(type) {
        case 1: type = NonProfitOrder();
            break;
        case 2: type = RegularOrder();
            break;
        case 3: type = OverseasOrder();
    return orders;
}

}

我需要读取的数据文件如下所示:

N 1000.0 NY
R 2000.0 CA 0.09
R 500.0 GA 0.07
N 2000.0 WY
O 3000.0 Japan 0.11 20.0
N 555.50 CA
O 3300.0 Ecuador 0.03 30.0
R 600.0 NC 0.06

首先我在读取文件时遇到问题,我知道我需要一个循环来将数据添加到 arrayList,但我不确定如何。在一种方法中读取和循环所有内容的最简单方法是什么?如果可能的话。

我更新以添加一些我拥有的 switch 语句,但它不起作用。我是否需要使用带有 N、O、R 的东西来匹配文件,而不是案例 1、2、3,而我在修复错误“类型不匹配”时遇到了麻烦。

4

2 回答 2

1

Scanner提供了一种简单的方法来浏览文件。.next() .hasNext() .nextLine() .hasNextLine() 在您的情况下是非常有用的方法。

于 2013-09-11T23:49:01.223 回答
0

您可以使用BufferedReader来执行此操作。

假设您使用 java7 的示例:

    //try with resources
    try(BufferedReader  reader = new BufferedReader(new InputStreamReader(new FileInputStream("orders.txt")))) {
        List<Order> orders = new ArrayList<>();
        String line = null; ;
        while( (line =reader.readLine()) != null){
             String [] array = line.split("\\s+"); // you split the array with whitespace
              orders.add(new NonProfitOrder(array[0],array[1])); // you add to the list ,you have to create a constructor string string or cast for proper type.               
        }           

    } catch (IOException ex) {
        //handle your exception
    } 
于 2013-09-11T23:56:09.500 回答