如何从ArrayList(Java)中填充Array的数据作为带参数的方法?

时间:2016-06-11 07:51:47

标签: java arrays arraylist

我的类赋值要求我根据从Lamborghinis的ArrayList中获取的马力值创建一个Lamborghini对象数组(已创建的类)。因此,Lamborghini []数组的大小需要取决于有多少ArrayList引用属于这些参数。我没有遇到麻烦;我的方法返回正确的数组长度,但每个对象返回' null'。

以下是我已经尝试过的一些策略:

public Lamborghini[] letsTryThisAgain(double lowHP, double highHP){
    ArrayList<Lamborghini> stockArray = new ArrayList<Lamborghini>();
    Iterator<Lamborghini> it = inventory.iterator();

    if ((inventory.get(0) != null) || (inventory.size() != 0)){
        while (it.hasNext()){
            Lamborghini l = it.next();
                if ((l.getHorsepower() >= lowHP) &&
                     (l.getHorsepower() <= highHP)){
                    stockArray.add(new Lamborghini(l.getModelYear(), l.getModelName(), l.getHorsepower(), l.getIsRearWheelDrive()));
                }
        }
    }

    Lamborghini[] lambosHP = new Lamborghini[stockArray.size()];

    lambosHP = stockArray.toArray(lambosHP);

    return lambosHP;
}

以及以下内容的变体:

for (int i = 0; i < inventory.size(); i++){
        if (inventory.get(i) != null )
        {
            if (inventory.get(i).getHorsepower() != 0.0 ){
            if ((inventory.get(i).getHorsepower() >= lowHP) &&
                     inventory.get(i).getHorsepower() <= highHP){
                    lambosHP[counter] = inventory.get(i);
                }
            }
        }
        counter ++;
    }

后者似乎有效,直到我得到lambosHP [counter] = inventory.get(i)行的ArrayOutOfBoundsException。

我希望有一个解决方案,但是对为什么它不起作用的一些解释会更好。

1 个答案:

答案 0 :(得分:0)

我认为你的方法存在的问题是你是在递增计数器变量而不管条件(所需HP中的汽车)和Lamborghini的主阵列列表的每个值。 假设共有50辆兰博基尼汽车,其中只有15辆属于所需的惠普条件。现在惠普所需汽车的阵列[]将只有15辆汽车。但是,由于您基于主数组递增计数器值,您的实现将尝试访问第16位。

您应该使用以下方法.TIA。

  for (int i = 0; i < inventory.size(); i++){
    if (inventory.get(i) != null )
    {
        if (inventory.get(i).getHorsepower() != 0.0 ){
        if ((inventory.get(i).getHorsepower() >= lowHP) &&
                 inventory.get(i).getHorsepower() <= highHP){
                lambosHP[counter] = inventory.get(i);
            counter++
            }
        }
    }
   // counter ++;
}