0

我有一个作业问题来计算不同航空公司的延误航班。我正在读取 CSV 文件,并为包含总航班和延误航班的“承运人”创建了一个类。由于有许多载体(大约 10 个),我如何在从 CSV(或二维数组)中读取载体对象时创建它们。

代替

carrier UA = new carrier("Us Airways", 100, 50);
carrier Delta = new carrier("Delta", 100, 50);

并对所有对象进行硬编码。

现在 CSV 数据在一个二维数组中,非面向对象的代码如下。

    public static void main (String [] args) throws Exception{

    CSVReader reader = new CSVReader(new FileReader("delayed.csv"));
    String [] nextLine;

    String[][] flightData = new String[221][3];
    int i=0;    
        while ((nextLine = reader.readNext()) != null) {

            for(int r = 0; r<2; r++){
            flightData[i][0] = nextLine[1];
            flightData[i][1] = nextLine[6];
            flightData[i][2] = nextLine[7];
            }
        i++;
        //System.out.println("Carrier: " + nextLine[1] + "\t\tTotal: " + nextLine[6] + "\t\tDelayed: " + nextLine[7] + "");
        }
        while(flightData != null){
        carrier 
        }
} 

谢谢。

4

1 回答 1

1
List<Carrier> listCarrier = new ArrayList<Carrier>();      

while ((nextLine = reader.readNext()) != null) {

    listCarrier.add(new Carrier(nextLine[1], Integer.valueOf(nextLine[6]), Integer.valueOf(nextLine[7])));

}

请注意,类 Carrier 应以大写字母开头。

如果要避免重复,可以使用 HashMap 代替 ArrayList,如下所示:

Map<String, Carrier> listCarrier = new HashMap<String, Carrier>();   

要插入新记录,请使用:

Carrier carrier = new Carrier(nextLine[1], Integer.valueOf(nextLine[6]), Integer.valueOf(nextLine[7]));
listCarrier .put(nextLine[1],carrier );
//Here the key is the carrier name, and the value is the carrier object

如果您有重复的运营商名称相同但值不同,则只有最后一个将保留在 HashMap 中。

要从列表中获取运营商,请使用:

listCarrier.get("carrier_name")

如果可用,这将从地图中返回名称为“carrier_name”的运营商。

于 2012-09-26T00:47:26.223 回答