I'm trying to make a simple javagame. One of the methods creates a new rectangle with random x and y values, and then it adds them to a list. I want my program to check if the new rectangle that is going to be added, intersects with one of the current ones and if it does, it should get new x and y values.
I've made a method that should work, but somehow it doesn't, I get the error:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException.
The code for the method is:
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();
}
Thanks in advance.
Update: Fixed by adding:
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);
}
This happens when you try to modify a collection while you are looping over it. here you are doing
obstacles.add(newRec);
while looping overobstacles
. You can useListIterator
to modify collection. That way you won't get this exception