(JAVA) Error in foreach

0

Why does an error occur in executing the code below if I remove the break? The value of the ArrayList client is not updated every time it completes the?

            for (Cliente cliente : clientes) {
                if (identificacao==cliente.getIdentificacao()) {
                    existeid = true;
                    exibeCliente(cliente,false);
                    System.out.println("Confirma exclusão? 1- SIM 2- NÃO");
                    op=sc.nextInt();
                    sc.nextLine();

                    if (op==1) {
                        clientes.remove(cliente);
                        System.out.println("Excluído com sucesso!");
                        break;
                    }
                    else{
                        System.out.println("Exclusão cancelada!");
                    }
                }
            }
    
asked by anonymous 15.04.2018 / 19:36

1 answer

1

You can not remove the element with remove from the list as it cycles with foreach because it invalidates the iterator used internally:

for (Cliente cliente : clientes) {
    if (identificacao==cliente.getIdentificacao()) {
        ...
        if (op==1) {
            clientes.remove(cliente); // <-- aqui
            ...

The iterator actually has methods of addition and removal precisely for this case. This however forces you to construct the loop / cycle differently, directly using the iterator:

Iterator<Cliente> iter = clientes.iterator(); //obter o iterador para a lista
while(iter.hasNext()){ //enquanto o iterador não chegou ao fim
    Cliente cliente = iter.next(); //obter o elemento corrente pelo iterador
    if (identificacao==cliente.getIdentificacao()) {
        ...
        if (op==1) {
            iter.remove(); // remoção a partir do iterador
            ...
}
    
15.04.2018 / 21:47