2016-03-18 85 views
0

嗨我想循環arraylist,但得到一個錯誤消息。所以我非常具體的問題是,我在哪裏做錯了什麼?Java,通過ArrayList循環

錯誤消息:

在java.util.ArrayList中$ Itr.checkForComodification(ArrayList.java:901) 在java.util中異常在線程 「主」 java.util.ConcurrentModificationException 。 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; 
} 

我一直在使用Google,但無法找到一個解決方案。我認爲我的主要問題是我不明白錯誤信息,所以任何幫助解釋這一點都會很好。

+0

不要在迭代它時更改內容。這是衆所周知的問題。 – Stultuske

+0

@Stultuske您應該將其作爲答案發布。毫無疑問,這是由for-each循環的iterand上的'remove'造成的。 –

+0

這是一個很好的觀點,現在我覺得很愚蠢,但非常感謝 –

回答

1

你打電話給 cors.remove(index); ,同時仍在迭代列表。這會弄亂索引並拋出異常。