Ingresar un ArrayList dentro de otro

publicado por: Anonymous

alguno podría ayudarme a resolver un problema de Java,

import java.util.ArrayList;
import java.util.Scanner;

public class EliminarDato {
        static ArrayList<Paciente> pacientes = new ArrayList<Paciente>();
        static ArrayList<Enfermedad> enfermedades = new ArrayList<Enfermedad>();

    public static void main(String[] args) {
        int op=0;
        Scanner intro = new Scanner (System.in);
        do{
            System.out.println("Escoja opción n1.Ingresar paciente 2. Ingresar Enfermedad n3. Salir");
        op = intro.nextInt();
           switch(op){
               case 1:
                   System.out.println("");
                   ingresarPacientes();
                   break;
               case 2:
                   System.out.println("ignorar esto");
                   ingresarEnfermedad();
                   break;
           } 
        }while(op!=3);
    }
        public static String ingresarPacientes() {
        Scanner intro = new Scanner(System.in);
        Paciente p = new Paciente();
            System.out.println("");

        System.out.println("Ingrese nombre del paciente");
        String nom = intro.next();
        p.setNombre(nom);
        System.out.println("Ingrese apellido del paciente");
        String ape = intro.next();
        p.setApellido(ape);
        System.out.println("Ingrese edad del paciente");
        byte edad = intro.nextByte();
        p.setEdad(edad);
        System.out.println("Ingrese sexo del paciente");
        String sexo = intro.next();
        p.setSexo(sexo);
        pacientes.add(p);
        return null;
    }
    public static String ingresarEnfermedad(){
        Scanner intro = new Scanner (System.in);
        System.out.println("Ingrese Nº de paciente al cual nregistrar una enfermedad");
        int num = intro.nextInt();
        num = num-1;
        System.out.println("");
        System.out.println(("Nombre: ")+pacientes.get(num).getNombre());
        //ingresar enfermedad
        Enfermedad e = new Enfermedad();
        System.out.println("Ingrese nombre enfermedad");
        String nom = intro.next();
        e.setNombre(nom);
        System.out.println("Ingrese descripción enfermedad");
        String desc = intro.next();
        e.setDesc(desc);
        enfermedades.add(e);
        return null;
    }

¿Cómo puedo asociar una enfermedad a un solo paciente??
¿También como podría imprimir por ejemplo las enfermedades solo del paciente 1
gracias por su tiempo!

solución

Una solución posible sería que la Persona tenga como atributo una lista de Enfermedades.

Solución:

Enfermedad

public class Enfermedad {

    private String nombre;
    // [MEJORA POSIBLE] Siempre es recomendable escribir el nombre completo del atributo.
    private String desc;

    public String getNombre() {
        return nombre;
    }

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

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}

Paciente

import java.util.List;

public class Paciente {

    private String nombre;
    private String apellido;
    private byte edad;
    private String sexo;

    // [MEJORA REALIZADA] Se agrega la lista de enfermedades, con su getter y setter
    private List<Enfermedad> listaEnfermedades;

    // [MEJORA REALIZADA] Se provee un metodo que agrega enfermedades a la lista del paciente
    public void agregarEnfermedad(Enfermedad enfermedad) {
        this.listaEnfermedades.add(enfermedad);
    }


    public String getNombre() {
        return nombre;
    }

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

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public byte getEdad() {
        return edad;
    }

    public void setEdad(byte edad) {
        this.edad = edad;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public List<Enfermedad> getListaEnfermedades() {
        return listaEnfermedades;
    }

    public void setListaEnfermedades(List<Enfermedad> listaEnfermedades) {
        this.listaEnfermedades = listaEnfermedades;
    }

}

EliminarDato

import java.util.ArrayList;
import java.util.Scanner;

public class EliminarDato {
    static ArrayList<Paciente> pacientes = new ArrayList<Paciente>();
    static ArrayList<Enfermedad> enfermedades = new ArrayList<Enfermedad>();

    public static void main(String[] args) {
        int op = 0;
        // [MEJORA POSIBLE] Los scanners deben abrirse y ceerrarse ( intro.close() )
        Scanner intro = new Scanner(System.in);
        do {
            System.out.println("Escoja opción n1.Ingresar paciente 2. Ingresar Enfermedad n3. Salir");
            op = intro.nextInt();
            switch (op) {
            case 1:
                System.out.println("");
                ingresarPacientes();
                break;
            case 2:
                System.out.println("ignorar esto");
                ingresarEnfermedad();
                break;
            }
        } while (op != 3);
    }

    // [MEJORA POSIBLE] Este metodo no devuelve nada, por lo que podria ser un metodo void
    public static String ingresarPacientes() {

        // [MEJORA POSIBLE] Los scanners deben abrirse y ceerrarse ( intro.close() )
        Scanner intro = new Scanner(System.in);

        // [MEJORA POSIBLE] La nomenclatura del objeto deberia ser mas descriptiva
        Paciente p = new Paciente();
        System.out.println("");

        System.out.println("Ingrese nombre del paciente");
        String nom = intro.next();
        p.setNombre(nom);
        System.out.println("Ingrese apellido del paciente");
        String ape = intro.next();
        p.setApellido(ape);
        System.out.println("Ingrese edad del paciente");
        byte edad = intro.nextByte();
        p.setEdad(edad);
        System.out.println("Ingrese sexo del paciente");
        String sexo = intro.next();
        p.setSexo(sexo);

        // [MEJORA REALIZADA] Se le setea al paciente una lista de enfermedades que puede llegar a tener
        p.setListaEnfermedades(new ArrayList<Enfermedad>());

        pacientes.add(p);
        return null;
    }

    // [MEJORA POSIBLE] Este metodo no devuelve nada, por lo que podria ser un metodo void
    public static String ingresarEnfermedad() {

        // [MEJORA POSIBLE] Los scanners deben abrirse y ceerrarse ( intro.close() )
        Scanner intro = new Scanner(System.in);
        System.out.println("Ingrese Nº de paciente al cual nregistrar una enfermedad");
        int num = intro.nextInt();
        num = num - 1;
        System.out.println("");

        // [MEJORA REALIZADA] Se obtiene el paciente de la lista y se conserva en atributo local
        //                    ya que va a ser utilizado posteriormente
        Paciente paciente = pacientes.get(num);
        System.out.println(("Nombre: ") + paciente.getNombre());
        // ingresar enfermedad
        // [MEJORA POSIBLE] La nomenclatura del objeto deberia ser mas descriptiva
        Enfermedad e = new Enfermedad();
        System.out.println("Ingrese nombre enfermedad");
        String nom = intro.next();
        e.setNombre(nom);
        System.out.println("Ingrese descripción enfermedad");
        String desc = intro.next();
        e.setDesc(desc);
        enfermedades.add(e);

        // [MEJORA REALIZADA] Una vez que agregamos la enfermedad a la lista de enfermedades,
        //                    tambien la agregamos al paciente en cuestion
        paciente.agregarEnfermedad(e);

        return null;
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *