2016-03-25 6 views
1

Скажем, numberTracker = {1,15,6,8} и numberString = {1,1,5,6,8}. Каждый номер в numberString имеет свою собственную плитку. Я пытаюсь установить, например, 1,5 на тот же цвет плитки, так как он равен 15 в numberTracker, тогда как tileIterator содержит ту же длину, что и numberString. Код отлично работает и делает то, что нужно делать. Тем не менее я получаю java.lang.IndexOutOfBoundsException: Index: 5, Size: 5индекс массива из привязанного 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

Почему вы не отлаживаете и не видите самостоятельно? –

ответ

1

Хорошо. Это происходит, когда вы пытаетесь получить доступ к индексу 5 в списке, в котором есть 4 элемента. Вы используете файл итератора, чтобы узнать, имеются ли значения next, но вы переходите к использованию get(x) для доступа к значениям списка. Выберите один.

Если вы хотите придерживаться get(x), избавьтесь от hasNext() и замените его на while(x<4 && y<5), так что доступ к списку не выходит за пределы.

Если вы хотите iterator, вместо использования get(x) используйте метод итератора next().

Использование обоих взаимозаменяемых не является хорошим, по крайней мере в этом случае.

0

Я думаю, что это дымящийся пистолет:

y++; 
y++; 

В следующий раз вокруг, вы будете больше, чем по списку проверяемом один.