2015-06-09 2 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

Просьба пояснить: простой итератор не может использоваться для добавления элементов в коллекцию, но один из его дочерних интерфейсов - ListIterator. –

+0

Yup Я имею в виду ListIterator –

Смежные вопросы