有没有办法动态创建对象?

时间:2012-09-26 00:38:44

标签: java arrays object 2d

我有一个家庭作业问题来计算不同航空母舰的延误航班。我正在从一个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 
        }
} 

感谢。

1 个答案:

答案 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”的运营商。