2016-06-11 10 views
1

Meine Klassenzuordnung erfordert, dass ich ein Array von Lamborghini-Objekten (Klasse bereits erstellt) basierend auf Pferdestärken aus einer ArrayList von Lamborghinis erstellt. Daher muss die Größe des Lamborghini [] -Arrays davon abhängig sein, wie viele ArrayList-Referenzen in diese Parameter fallen. Ich habe keine Probleme mit diesem Teil; Meine Methode gibt die korrekte Länge des Arrays zurück, aber jedes Objekt gibt 'null' zurück.Wie werden die Daten eines Arrays aus einer ArrayList (Java) als Methode mit Parametern gefüllt?

Hier sind ein paar Taktiken ich schon versucht habe:

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; 
} 

und Variationen auf der folgenden:

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 ++; 
    } 

Letztere, bis ich eine ArrayOutOfBoundsException für die Linie lambosHP an die Arbeit erscheint [Zähler] = inventar.get (i).

Ich würde gerne eine Lösung, aber einige Erklärung zu warum es funktioniert nicht wäre noch besser.

+0

was versuchst du zu tun ?? 'Lamborghini [] lambosHP = neuer Lamborghini [stockArray.size()]; lambosHP = stockArray.toArray (lambosHP); return lambosHP; 'glaubst du, es wird Array zurückholen? – emotionlessbananas

Antwort

0

Ich vermute das Problem mit Ihrem Ansatz ist, dass Sie die Zählervariable unabhängig von der Bedingung (Autos mit in der gewünschten HP) und für jeden Wert der Haupt-Array-Liste von Lamborghini erhöhen. Sagen wir, es gibt insgesamt 50 Lamborghini Autos, von denen nur 15 unter den gewünschten HP Zustand fallen. Jetzt wird das Array [] des von HP gewünschten Autos nur 15 Autos haben. Da Sie jedoch den Zählerwert erhöhen, der auf dem Haupt-Array basiert, versucht Ihre Implementierung, auf die 16. Position zuzugreifen.

Sie sollten wahrscheinlich den folgenden Ansatz verwenden. 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 ++; 
} 
Verwandte Themen