2015-12-06 2 views
0

Есть метод ниже, который возвращает массив всех объектов Lamborghini, которые имеют мощность в диапазоне, переданном как параметр. Когда я пытаюсь скомпилировать ошибку, Lamborghini.length не может найти символ - переменную длину. Не является ли частью ArrayList?Ошибка длины массива Java ArrayList

public Lamborghini[] getCarsWithHorsepowerRange(double lowHP, double highHP) 
{ 

    int horsePower = 0; 

    for(int i = 0; i < Lamborghini.length; i++) 
    { 
     if(Lamborghini[i] != null) 
     { 
      if((Lamborghini[i].getHorsePower() >= lowHP) && 
      ((Lamborghini[i].getHorsePower() <= highHP))) 
      { 
       horsePower++; 
      } 
     } 
+0

Можете ли вы показать декларацию 'Lamborghini'? – resueman

+1

.size(), и вы получаете индекс .get (i) – Steven

+0

Возможный дубликат [Как найти длину списка массивов?] (Http://stackoverflow.com/questions/9652732/how-to- find-the-length-of-the-array-list) –

ответ

1

Там есть несколько вопросов, с вашим код. Во-первых, вы пытаетесь использовать Lamborghini для обозначения объявленного ArrayList, когда Lamborghini - это только тип хранимого в нем объекта. Вместо этого вы должны использовать имя переменной, в данном случае inventory, для обращения к экземпляру созданного вами ArrayList.

Во-вторых, вы вводите в заблуждение Arrays и ArrayLists, которые являются разными типами и имеют разные способы доступа к их длине и содержимому. Поскольку вы используете ArrayList, вам нужно использовать метод size(), чтобы получить его длину, и метод .get(int) для доступа к элементам.

Так изменить код, чтобы это исправить эти ошибки:

public Lamborghini[] getCarsWithHorsepowerRange(double lowHP, double highHP){ 
    int horsePower = 0; 

    for(int i = 0; i < inventory.size(); i++){ 
     if(inventory.get(i) != null){ 
      if((inventory.get(i).getHorsePower() >= lowHP) && 
       (inventory.get(i).getHorsePower() <= highHP)){ 
       horsePower++; 
      } 
     } 
    } 
} 

Это будет по-прежнему есть проблемы, так как она имеет тип возвращаемого Lamborghini[] (массив Lamborghini), который никогда не возвращается. Я не знаю, что это за намерение, но если вам не требуется возвращаемое значение, вы можете просто изменить его на void. Или вы можете изменить тип на ArrayList<Lamborghini> и вернуть объект inventory. В противном случае вам нужно будет создать новый массив и заполнить его:

Lamborghini[] result = new Lamborghini[inventory.size()]; 
for(int i = 0; i < inventory.size(); i++){ 
    result[i] = inventory.get(i); 
} 
return result; 
+0

спасибо resueman, что было очень полезно, спасибо за то, что Array S и ArrayList для меня шли кругами. – TOD

0

позволяет говорить lamborghiniList список объектов Lamborghini .. инициализировать его в конструкторе или методом сеттер вы можете попробовать следующий код ...

public Lamborghini[] getCarsWithHorsepowerRange(double lowHP, double highHP) { 

    List<Lamborghini> desiredObjects = new ArrayList<Lamborghini>(); 

    for (int i = 0; i < lamborghiniList.size(); i++) { 
     if (lamborghiniList.get(i) != null) { 
      if ((lamborghiniList.get(i).getHorsePower() >= lowHP) && 
        ((lamborghiniList.get(i).getHorsePower() <= highHP))) { 
       desiredObjects.add(lamborghiniList.get(i)); 

      } 
     } 
    } 
    return desiredObjects.toArray(); 
} 
Смежные вопросы