Excluir e editar objeto dentro de uma array list?

5 respostas
R

Boa tarde galera!

Estou fazendo um pequeno programa para treinar os conceitos de Java, onde o objetivo é que usuário consiga incluir registro numa agenda, listar, editar e excluir.

Com a ajuda do pessoal aqui do fórum, consegui criar os métodos adicionar e lista, porém estou com dificuldades ao criar os métodos excluir e editar.

Método excluir (ps: Acho que a lógica está errada - criei um número de registro para cada objeto na lista e comparo se o registro do objeto é igual ao que o usuário deseja excluir):

public void excluirRegistro(){
        int excluir;
        Scanner sc = new Scanner(System.in);
        System.out.println("Digite o número do registro que deseja excluir: ");
        excluir=sc.nextInt();
                    
        for(RegistroAgenda r: agenda){
            if(excluir==getRegistro()){
                agenda.remove(r);
           }
        System.out.println("Registro removido!");
        }
        
   
    }

Quando compilo aparece o seguinte erro:

Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
        at java.util.AbstractList$Itr.next(AbstractList.java:343)
        at agenda.RegistroAgenda.excluirRegistro(RegistroAgenda.java:90)
        at agenda.Main.main(Main.java:38)
Java Result: 1

E sobre a função editar registro da agenda, não consegui pensar numa maneira para editar este registros. Pensei em controlar pelo número de registros também...alguma dica?

Obrigado pessoal!

Abraços!

5 Respostas

rmendes08

Esse erro ocorre porque você não pode alterar a collection de dentro de um loop for each. Se você colocar um break logo após o remove() talvez dê certo. Agora, já que você está usando uma estrutura do tipo chave->valor, você pode usar uma Map, sua vida vai ficar bem mais fácil.

R

Vou tentar colocar o break e vê oq acontece!

Desculpe a falta de conhecimento, mas o que é uma Map? hehe

Abraços!

J

Vou tentar colocar o break e vê oq acontece!

Desculpe a falta de conhecimento, mas o que é uma Map? hehe

Abraços!

Map ou HashMap é também conhecido como dicionário, pois sua função assemelha-se com a de um dicionário, ele é definido com chaves e valores, cada chave possuindo seu próprio valor. Sua chave e valor pode ser de qualquer tipo, seja String, Integer, Char, Pessoa…

Exemplo como funciona um hashmap em comparação a um dicionário:

Você procura uma certa palavra no dicionário para saber seu significado.

Palavra(Key) Significado(Value)
‘Gato’ —> Gato é um mamífero que come ratos.
‘Cachorro’ —> Cachorro é um mamífero que come gatos.

Para saber como usar o hashmap basta ver na sua documentação
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html

flw ae :wink:

R

Vou tentar colocar o break e vê oq acontece!

Desculpe a falta de conhecimento, mas o que é uma Map? hehe

Abraços!

Map ou HashMap é também conhecido como dicionário, pois sua função assemelha-se com a de um dicionário, ele é definido com chaves e valores, cada chave possuindo seu próprio valor. Sua chave e valor pode ser de qualquer tipo, seja String, Integer, Char, Pessoa…

Exemplo como funciona um hashmap em comparação a um dicionário:

Você procura uma certa palavra no dicionário para saber seu significado.

Palavra(Key) Significado(Value)
‘Gato’ —> Gato é um mamífero que come ratos.
‘Cachorro’ —> Cachorro é um mamífero que come gatos.

Para saber como usar o hashmap basta ver na sua documentação
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html

flw ae :wink:

Valeu!!! Vou dá uma olhada!

Ahhh pessoal, o break resolveu o problema daquele erro.

ViniGodoy

Se você realmente precisar excluir dentro de um for, use um Iterator.

List<Integer> inteiros = new ArrayList<Integer>();
inteiros.add(10);
inteiros.add(20);
inteiros.add(30);
inteiros.add(10);
inteiros.add(20);
inteiros.add(40);
inteiros.add(70);
inteiros.add(10);
inteiros.add(90);

//Vamos excluir todos os "10"
Iterator<Integer> it = inteiros.interator();
while (it.hasNext()) {
   Integer numero = it.next();
   if (numero == 10) {
      it.remove();
   }
}

E não se esqueça que para comparar objetos não se usa == e sim o método equals.

Criado 27 de maio de 2010
Ultima resposta 27 de mai. de 2010
Respostas 5
Participantes 4