我有一个家庭作业问题来计算不同航空母舰的延误航班。我正在从一个CSV文件中读取并为"运营商"创建一个类。总航班和延误航班。由于有许多载波(10个左右),如何在从CSV(或2d阵列)读取载波对象时创建载波对象。
而不是
carrier UA = new carrier("Us Airways", 100, 50);
carrier Delta = new carrier("Delta", 100, 50);
并对所有对象进行硬编码。
现在CSV数据处于2D数组中,非面向对象的代码如下所示。
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
}
}
感谢。
答案 0 :(得分: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类应以大写字母开头。
如果你想避免dupplicates,你可以使用ArrayList的HashMap instade如下:
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”的运营商。