Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema al acceder a un ArrayList dentro de una clase con atributo ArrayList

Estas en el tema de Problema al acceder a un ArrayList dentro de una clase con atributo ArrayList en el foro de Java en Foros del Web. Hola buenos dias El motivo de este mensaje es que estoy haciendo un ArrayList de personas y dentro de la clase persona tengo uno de ...
  #1 (permalink)  
Antiguo 07/04/2014, 06:00
 
Fecha de Ingreso: abril-2014
Mensajes: 2
Antigüedad: 10 años, 7 meses
Puntos: 0
Problema al acceder a un ArrayList dentro de una clase con atributo ArrayList

Hola buenos dias

El motivo de este mensaje es que estoy haciendo un ArrayList de personas y dentro de la clase persona tengo uno de los atributos otro ArrayList de teléfonos.

Este es el Main
Código:
public static void main(String[] args) {

        ArrayList<Persona> personas = new ArrayList<Persona>();
        String resp = "";
        Scanner sc = new Scanner(System.in);

        do {
            Persona p = new Persona();
            do {
                
                String telefono;
                do
                {
                    System.out.print("Telefono:");
                    telefono = sc.nextLine();
                    
                } while(existeTelefono(personas, telefono));)
                
                p.addTelefono(telefono);
                        
                System.out.print("Mas telefonos? (s/n)");
                resp = sc.nextLine();   
                
            } while(!resp.equals("n"));
            personas.add(p);

            System.out.print("Quieres meter otra persona?(s/n)");
            resp = sc.nextLine();
        } while (!resp.equals("n"));}
    public static boolean existeTelefono(ArrayList<Persona>personas, String telefono){
       
        for (int i = 0; i < personas.size(); i++) {
            for (int j = 0; j < personas.get(i).getTelefono().size();j++) {
                if(personas.get(i).getTelefono().get(j).equals(telefono))
                    return true;
                
            }
        }
        return false;
    
        }
Y este es la clase Persona
Código:
public class Persona {

    private String dni;
    private String nombre;
    private String apellidos;
    private ArrayList<String> telefono;
    private ArrayList<String> email;

    public Persona() {
        telefono = new ArrayList<String>();
        email = new ArrayList<String>();
    }
    
    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public void addTelefono(String telf) {
        telefono.add(telf);
    }

    public ArrayList<String> getTelefono() {
        return telefono;
    }


    public ArrayList<String> getEmail() {
        return email;
    }

    public void addEmail(String e) {
       email.add(e);
    }   
}
El problema es que en el bucle for de comprobar si existe teléfono no entra, pero me devuelve false aunque el teléfono este repetido , no se por que el método boolean existeTelefono no me funciona. Espero que me puedan ayudar. Muchas gracias

He limitado el código solo a esta función aunque me ocurre lo mismo con los email, pero si lo he conseguido hacer con dni en un simple bucle for. El problema es cuando accedo a un for dentro de otro for. No se que estoy haciendo mal. Muchas gracias de nuevo. Agradecería mucho vuestra ayuda

Última edición por xpansul; 07/04/2014 a las 06:56
  #2 (permalink)  
Antiguo 07/04/2014, 08:25
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Problema al acceder a un ArrayList dentro de una clase con atributo ArrayL

¿Cómo haces la prueba? Metes una persona, finaliza el programa, lo vuelves a arrancar y metes otra persona, ¿o metes dos personas durante la misma ejecución?

El teléfono repetido, ¿lo haces metiendo dos veces el teléfono en la misma persona?
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 07/04/2014, 09:40
 
Fecha de Ingreso: abril-2014
Mensajes: 2
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Problema al acceder a un ArrayList dentro de una clase con atributo ArrayL

Creo una persona, la introduzco en un ArrayList de persona pero esta a su vez tiene un Arraylist de telefonos y quería comprobar si ese teléfono ya se había introducido antes en la misma persona. Al final he podido dar con la solución declarando el método getTelefono.
Aquí tenéis la solución que para un principiante como yo espero que le pueda servir, por que a mi, me ha costado bastante muchas gracias:
Código:
    
public static boolean existeTelefono(Persona p, String telefono) {
        for (int i = 0; i < p.getTelefono().size(); i++) {
            if (p.getTelefono().get(i).equals(telefono)) {
                System.out.println("Introduzca otro telefono que este ya existe");
                return true;
            }
        }
        return false;
    }
  #4 (permalink)  
Antiguo 08/04/2014, 01:32
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: Problema al acceder a un ArrayList dentro de una clase con atributo ArrayL

Cita:
El teléfono repetido, ¿lo haces metiendo dos veces el teléfono en la misma persona?
Cita:
Iniciado por xpansul Ver Mensaje
Creo una persona, la introduzco en un ArrayList de persona pero esta a su vez tiene un Arraylist de telefonos y quería comprobar si ese teléfono ya se había introducido antes en la misma persona. Al final he podido dar con la solución declarando el método getTelefono.
Aquí tenéis la solución que para un principiante como yo espero que le pueda servir, por que a mi, me ha costado bastante muchas gracias:
Esa era la clave, tu método existeTelefono recibe una lista de todos las personas que ya están creadas, pero la última persona no se añade hasta tener todos los teléfonos por lo que era imposible que que lo comprobases usando tu método.

Con tu corrección compruebas que la última persona no tenga un teléfono repetido, pero no tienes en cuenta los teléfonos de las personas anteriores.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: arraylist, clase, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:29.