0

I want to add new Enemy but there's a ConcurrentModificationException. 'enemies' is an ArrayList<Enemy> that has 2 Enemy object, and 'enemy' is an ArrayList<Enemy> that has Enemies appeared on the screen.

I have made classes before, so I tried changing objects, but they didn't work. How can I add enemy and sort a list?

public EnemiesManager() {
    random = new Random();
    enemies = new ArrayList<Enemy>();
    enemy = new ArrayList<Enemy>();

    cactus1 = new Cactus();
    cactus2 = new Cactus2();
    dinosaur = new Dinosaur();

    enemies.add(cactus1);
    enemies.add(cactus2);

    r = random.nextInt(2);
    enemy.add(enemies.get(r));
}

public Rectangle getBound() {
    rect = new Rectangle();
    for (Enemy e : enemy) {
        rect.x = e.getPosX();
        rect.y = e.getPosY();
        rect.width = e.getFrame().getWidth();
        rect.height = e.getFrame().getHeight();
    }
    return rect;
}

public void draw(Graphics g) {
    for (Enemy e : enemy) {
        e.draw(g);
    }
}

public void update() {
    for (Enemy e : enemy) {
        if(enemy.size()<=5) {
            int finalTerm = e.getPosX() + 100 + term.nextInt(600);
            r = random.nextInt(2);
            nextEnemy = enemies.get(r);
            nextEnemy.setPosX(finalTerm);
            enemy.add(nextEnemy);
        }
        e.update();
    }

    if (enemy.get(0).getPosX() + enemy.get(0).getFrame().getWidth() < 0) {
        enemy.remove(0);
    }
}

public boolean isCollision() {
    for (Enemy e : enemy) {
        if (dinosaur.getBound().intersects(e.getBound())) {
            return true;
        }
    }
    return false;
}
Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197

1 Answers1

0

You can't modify a collection while iterating over it. So if u loop through a collection using a iterator you'll get Concurrent modification error. Use a simple for loop rather then for each loop, that way u won't use iterator and won't get the error.