2016-08-22 7 views
1

Ich erhalte den Fehler java.lang.IndexOutOfBoundsException: Index: 0, Größe: 0.java.lang.IndexOutOfBoundsException: Index: 0, Größe: 0 Ausnahme

public Collection<AdDistribution> getAdDistribution(byte srch, byte cont) throws IndexOutOfBoundsException { 

    List<AdDistribution> mediums = new ArrayList<>(); 
    List<AdDistribution> adDistribution = new ArrayList<>(); 
      adDistribution.add(AdDistribution.SEARCH); 
      adDistribution.add(AdDistribution.CONTENT); 
      if (adDistribution.isEmpty()) { 
       return null; 
       } 

    if (srch == 0 && cont == 0) { 
     mediums = new ArrayList<>(); 
     mediums.set(0, adDistribution.get(0)); 
    } 
    if (srch == 1 || cont == 1) { 
     mediums = new ArrayList<>(); 
     if (srch == 1) { 
      mediums.set(0, adDistribution.get(0)); 
     } else if (cont == 1) { 
      mediums.set(0, adDistribution.get(1)); 
     } 
    } 
    if (srch == 1 && cont == 1) { 
     mediums = new ArrayList<>(); 
     mediums.set(0, adDistribution.get(0)); 
     mediums.set(1, adDistribution.get(1)); 
    } 
      return mediums; 
} 

Antwort

2

Sie benötigen

verwenden
mediums.add(adDistribution.get(0)); 

statt mediums.set(0, adDistribution.get(0)); usw.

ArrayList.set(int, Object) es ein Element sein erfordert zu ersetzen:

Ersetzt das Element an der angegebenen Position in dieser Liste mit dem angegebenen Element.

Wirft: IndexOutOfBoundsException - wenn der Index außerhalb des zulässigen Bereichs (Index < 0 || index> = size()) ist

In einer neuen Liste, size() == 0, so versagt set(0, something).

+0

Can u den geänderten Code – Manju

+0

In meiner Antwort teilen: „Sie müssen [geändert zum Einsatz Code] und nicht [Ihr Code] ". Entschuldigung, das ist alles, was du von mir bekommst: Du musst dich selbst etwas anstrengen. –

4

Das Problem ist, dass man Set-Methode verwenden, um Aktualisierungselement bei Index 0

Satzes (Index, Wert) Verfahren benötigt ein Element an diesem Index zu präsentieren

aber haven‘ t hat zuvor irgendein Element an dieser Position in der Medium-Arraylist hinzugefügt.

Sie müssen also zuerst 0 ein Element bei Index hinzufügen danach nur können Sie es mit Set-Methode aktualisieren

0

EDIT: ich entfernt nur die unnötige wenn Anweisungen und sie vereinfacht den Code besser lesbar zu machen.
Dann habe ich die setzen Funktionen mit der hinzufügen Funktion ersetzt, weil das Set nur bestehende Elemente setzen kann.

EDIT2: Basierend auf Andy Turners Antwort habe ich meinen Code geändert. Danke für die Vorschläge!

Nach diesen Änderungen sollte der Code wie folgt aussehen (hinzufügen/entfernen/ändern Sie es für Ihre Bedürfnisse):

public Collection<AdDistribution> getAdDistribution(byte srch, byte cont) throws IndexOutOfBoundsException { 

    List<AdDistribution> mediums = new ArrayList<>(); 

    if((srch == 0 && cont == 0) || srch == 1) { 
     mediums.add(AdDistribution.SEARCH); 
    } 

    if(cont == 1) { 
     mediums.add(AdDistribution.CONTENT); 
    } 

    return mediums; 
} 
+0

"Ich habe nur die unnötigen if-Anweisungen entfernt" Sie könnten auch 'if (adDistribution.isEmpty()) {' entfernen, was niemals falsch ist. 'adDistribution' ist auch überflüssig: Fügen Sie einfach' AdDistribution.SEARCH' und 'AdDistribution.CONTENT' direkt zu' mediums' hinzu. –

+0

Danke für die Vorschläge. Zuerst habe ich auf diese Teile des Codes nicht geachtet, ich hätte bei allem genauer sein sollen. Ich habe meinen Kommentar bearbeitet. Grüße! – Pohkalopokh

Verwandte Themen