2016-03-18 2 views
0

Привет, я пытаюсь пропустить арраист, но получаю сообщение об ошибке. Поэтому мой очень конкретный вопрос: где я делаю что-то неправильно?Java, Looping через ArrayList

Сообщение об ошибке:

Исключение в потоке "главный" java.util.ConcurrentModificationException в java.util.ArrayList $ Itr.checkForComodification (ArrayList.java:901) в java.util. ArrayList $ Itr.next (ArrayList.java:851) в main.numberOfNeighbours (main.java:130) в main.calculateNextGen (main.java:95) в main.main (main.java:30)

Код:

public static int numberOfNeighbours(boolean[][] arena, int x, int y){ 
    //Calculates a given cells number of neighbours. 

    int height = arena[0].length; 
    int width = arena.length; 

    ArrayList<int[]> cors = new ArrayList<int[]>(); 
    for(int i = -1; i < 2; i++){ 
     for(int e = -1; e < 2; e++){ 
      int[] xy = {x+i, y+e}; 
      cors.add(xy); 
     } 
    } 

//This is where I get the error 
    for(int[] xy : cors){ 
     //Exclude cors that are out of range or the cell itself. 
     if(xy[0] == -1 || xy[1] == -1 || xy[0] == width || xy[0] == height || (xy[0] == x && xy[1] == y)){ 
      int index = cors.indexOf(xy); 
      cors.remove(index); 
     } 
    } 

    int neighbours = 0; 
    for(int[] xy : cors){ 
     if(arena[xy[0]][xy[1]]){ 
      neighbours++; 
     } 
    } 

    return neighbours; 
} 

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

+0

Не изменяйте содержимое при его повторении. это хорошо известно, что вызывают проблемы. – Stultuske

+0

@Stultuske Вы должны опубликовать это как ответ. Нет сомнений в том, что это вызвано «удалением» в iterand цикла for-each. –

+0

Это очень хороший момент, теперь я чувствую себя довольно глупо, но очень благодарен –

ответ

1

Вы звоните cors.remove (index); в то же время повторяя список. Это испортит индексы и выдает исключение.