Jump to content

ayuda ArrayList


Recommended Posts

buenas tengo la siguiente duda supongamos que tengo una ArrayList de nombre contactos la cual es de tipo contacto donde hay un nombre. para buscar y eliminar a todos los contactos con el mismo nombre se me ocurre que podría ser así:

 

public void buscarEliminar(String nuevoNombre) {
    for(Contacto x : contactos) {
       if(x.getNombre().equalsIgnoreCase(nuevoNombre)) {
           contactos.remove(x);
       }
    }
}

 

 

pero me da un error quisiera saber cómo busco al contacto en la ArrayList por su nombre y lo elimino?

Edited by Dr.Smoke
Link to comment
Share on other sites

mmm ok espera deja hacer el ejercisios eske no guarde el codigo.

----- OK

 

ya no me da error cosa rara porke antes si bueno la cosa es que elimina solo uno y no a todos los que se llaman igual me entieneden

 

dejo el codigo de las dos clase:

 

public class Contacto
{
    private String nombre;
    
    public Contacto(String nombre) {
        this.nombre = nombre;
    }    
    public Contacto() {
        this.nombre = null;
    }
    
    public String getNombre(){
        return nombre;
    } 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }    
}

 

import java.util.ArrayList;

public class Agenda
{
private ArrayList<Contacto> contactos;

    public Agenda() {
        this.contactos = new ArrayList<Contacto>();
    } 
    public void agregarContacto(Contacto contacto) {
        contactos.add(contacto);
    }
    public void listarContactos() {
        for(Contacto x : contactos) {
            System.out.println("Nombre: "+x.getNombre());
        }
    }
    public void buscarEliminar(String nuevoNombre) {
    for(Contacto x : contactos) {
       if(x.getNombre().equalsIgnoreCase(nuevoNombre)) {
           contactos.remove(x);
       }
    }
    }
}

Edited by Dr.Smoke
Link to comment
Share on other sites

amigo su problema es simple

el error que te manda es porque estas modificando la lista al mismo tiempo que la recorres.

el for each o for mejorado te sirve solo para iterar una lista y no para agregar o quitar datos a la lista

como solucion te propongo que en el metodo buscarEliminar crees un nuevo arrayList que te almacene los objetos que van a ser eliminados

luego llamas al metodo removeall(Collection<?> c) de la lista contactos y le pases como parametro el arrayList que contiene la lista de objetos que van a ser eliminados

 

pd: si tienes problemas te agrego el código... pero lo ideal es que lo hagas tu

Edited by bersek
Link to comment
Share on other sites

mmm entiendo pero la verdad eske hoy resien vimos ArrayList y el ForEach y me surgio esa duda pero si la solucion es tan dificil no importa ya se ira despejando con el tiempo

 

----

se ke es pedir mucho pero si mostraras el codigo comentado para aprender lo que me dices... o quizas no todo el codigo pero aclararme mejor eso xD eske no se me ocurre como hacerlo.

Edited by Dr.Smoke
Link to comment
Share on other sites

    public void buscarEliminar(String nuevoNombre) {
   //creamos el ArrayList auxiliar que nos va  a contener los objetos que serán eliminados
   ArrayList<Contacto> aux=new ArrayList<Contacto>();

    for(Contacto x : contactos) {
       if(x.getNombre().equalsIgnoreCase(nuevoNombre)) {
           aux.add(x); // si se cumple la condición, guardamos el objeto en la lista
       }
    }
    //aqui le pasamos la lista de objetos que cumplían con la condición para que sean eliminados de la lista contactos
      contatos.removeAll(aux);
    }

 

es mas facil de lo que parece :ROLF:

 

otra cosa...en tu clase Contacto tienes dos constructores y uno de ellos deja a la variable "nombre" con una referencia null asegúrate de que al momento de crear el objeto, el nombre no quede con dicha referencia ya que aunque se agregue a la lista sin problemas, te dará un error en tiempo de ejecución de tipo NullPointerException

Edited by bersek
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...