2016-03-25 11 views
1

Sagen wir numberTracker = {1,15,6,8} und numberString = {1,1,5,6,8}. Jede Nummer in numberString hat ihre eigene Kachel. Ich versuche, zum Beispiel 1,5 auf die gleiche Kachelfarbe zu setzen, da es gleich 15 in numberTracker ist, während tileIterator die gleiche Länge wie numberString enthält. Der Code funktioniert perfekt und tut was zu tun ist. Aber ich bekomme java.lang.IndexOutOfBoundsException: Index: 5, Size: 5Array-Index außerhalb der Grenze Java

ListIterator <String> nmbTracker = numberTracker.listIterator(); 
ListIterator <Tile> tileIterator = tiles.listIterator(); 
Tile t; 

int x = 0; 
int y = 0; 

while (nmbTracker.hasNext()) { 

    if (numberTracker.get(x).equals(numberString.get(y))) { 

     t = tileIterator.next(); 
     t.setColor(tilePanel2.changeColour()); 
     if (numberTracker.size() - 1 != x) { 
      x++; 
     } 
     if (numberString.size() - 1 != y) { 
      y++; 
     } 


    } else { 
     x++; 
     t = tileIterator.next(); 
     t.setColor(tilePanel2.changeColour()); 
     Color color = t.getColor(); 
     t = tileIterator.next(); 
     t.setColor(color); 
     y++; 
     y++; 


    } 

    repaint(); 
} 
+1

Warum debuggen und sehen Sie nicht selbst? –

Antwort

1

Nun. Das passiert, wenn Sie versuchen, in einer Liste mit 4 Elementen auf Index 5 zuzugreifen. Sie verwenden den hasNext() des Iterators, um zu sehen, ob next Werte verfügbar sind. Sie wechseln jedoch zu get(x), um auf die Listenwerte zuzugreifen. Wählen Sie eine.

Wenn Sie die get(x) halten wollen, loszuwerden, die hasNext() und ersetzen sie durch while(x<4 && y<5), so dass die Liste nicht außerhalb der Grenzen Zugriffe gehen.

Wenn Sie die iterator wollen, anstatt get(x) zu verwenden, verwenden Sie die next() Methode des Iterators.

Die Verwendung von beiden austauschbar ist nicht gut, zumindest in diesem Fall.

0

Ich denke, das ist die smoking gun:

y++; 
y++; 

Das nächste Mal um, werden Sie eine weitere entlang als die Liste, die Sie gerade überprüfen.

Verwandte Themen