2015-06-09 131 views
0

我試圖做一個簡單的javagame。其中一種方法創建一個具有隨機x和y值的新矩形,然後將它們添加到列表中。 我希望我的程序檢查是否要添加新的矩形,與當前的矩形相交,如果是,它應該得到新的x和y值。Java 2D遊戲隨機矩形

我做了應該工作的方法,但不知何故,不,我得到的錯誤:

Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException. 

該方法的代碼是:提前

public void addObstacle() { 
    int x = (int)((Math.random() * 10)) * 40; 
    int y = (int)((Math.random() * 10)) * 20; 
    Rectangle newRec = new Rectangle(x, y, 20, 20); 

    for(Rectangle r : obstacles) { 

     if(newRec.intersects(r)) { 
      System.out.println("The new rectangle does intersect with " + r); 
     } 
     else { 
      obstacles.add(newRec); 
     } 
    } 

    repaint(); 
} 

謝謝。

更新:加入修正:

Boolean doesCollide = false; 
    for(Rectangle r : obstacles){ 

     if(newRec.intersects(r)){ 
      System.out.println("The new rectangle does intersect with " + r); 
      doesCollide = true; 
     } 

    } 

    if(!doesCollide){ 
     obstacles.add(newRec); 
    } 
+0

你能複製整個錯誤行嗎? –

回答

2

這發生在您嘗試修改的集合,而你是遍歷它。在這裏你正在做obstacles.add(newRec);,同時循環obstacles。您可以使用ListIterator修改收集。這樣你就不會得到這個異常

+0

謝謝,我解決了這個問題,它工作。 – Jullix993

+0

請澄清:一個普通的Iterator不能用於添加元素到一個集合,但它的一個子接口ListIterator可以。 –

+0

是的,我的意思是ListIterator –