我有一个带有抽象类'Orders'的程序,有三个不同的类实现它,当我用硬编码命令测试时,程序中的所有内容都运行正常。
这是抽象类:
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语句,但是没有用。而不是情况1,2,3,我将需要使用N,O,R的东西来匹配文件 而且我无法修复错误“类型不匹配”。
答案 0 :(得分:1)
Scanner提供了一种简单的方法来浏览文件。 .next()。hasNext()。nextLine()。hasNextLine()是非常有用的方法。
答案 1 :(得分: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
}