2015-06-09 129 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 –