java.util.ConcurrentModificationException

Estou tendo problema com essa parte do meu código, é um exercício do meu curso, ele funciona direitinho exceto em uma parte, que eu n tenho a mínima ideia de como resolver
qualquer ajuda é bem vinda :slight_smile:

id é int

System.out.println("Digite o id: "); 
i = in.nextInt(); //atribui o valor digitado em i

for (Triangulo t : triangulos) //o erro está aqui {
	if (t.getId() == i) // compara i com algum id armazenado na lista{
		triangulos.remove(t); //remove o item da lista
	}
}

Os erros que dão, são esses:

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
	at java.util.ArrayList$Itr.next(ArrayList.java:851)
	at exerciciotriangulo.ExercicioTriangulo.main(ExercicioTriangulo.java:94)
//linha 94 é o for, lá de cima

@joao_teixeira2002

Quando vc faz o for aprimorado ou usando iterator a cada iteração ele checa se lista não foi modificada dai caso ela esteja modificada ela lança a Exceção:

java.util.ConcurrentModificationException

aqui uns exemplos que vc pode remover um item de um arraylist sem usar o for aprimorado :

    //removendo com iterator
    //nessa caso vc pode remover com o proprio objeto Iterator e nao com objeto ArrayList
    List<String> listOfBooks = new ArrayList<>();
    listOfBooks.add("Programando com Java");
    listOfBooks.add("Programando C#");
    listOfBooks.add("Melhor Java");
    listOfBooks.add("Código completo");

    System.out.println("Lista antes : " + listOfBooks);
    Iterator<String> iterator = listOfBooks.iterator();
    while (iterator.hasNext()) {
        String book = iterator.next();
        System.out.println("Removendo " + book);
        if (book.equalsIgnoreCase("Programando C#")) {
            iterator.remove();
        }

    }
    System.out.println("Lista depois : " + listOfBooks);
    System.out.println("-------------------------------------------------");

    //----------------------------------
    //removendo com for tradicio0nal
    List<String> listOfBooks2 = new ArrayList<>();
         listOfBooks2.add("Programando com Java 2 ");
    listOfBooks2.add("Programando C# 2");
    listOfBooks2.add("Melhor Java 2");
    listOfBooks2.add("Código completo 2");
    
    System.out.println("Lista antes : " + listOfBooks2);
   for(int i=0; i<listOfBooks2.size(); i++){
       String book = listOfBooks2.get(i);
       if(book.contains("Programando")){
           System.out.println("Removendo " + book);
           listOfBooks2.remove(i); // will throw CME
       }
   }
    System.out.println("List depois : " + listOfBooks2);