我的类赋值要求我根据从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。
我希望有一个解决方案,但是对为什么它不起作用的一些解释会更好。
答案 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 ++;
}