Java - Ayuda con ArrayList y como agregar datos

 
Vista:
Imágen de perfil de Big
Val: 5
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con ArrayList y como agregar datos

Publicado por Big (2 intervenciones) el 13/04/2020 23:50:38
Buenas tardes! Una disculpa si mi pregunta o post es un poco tonto
Verán me propuse hacer un programa que simule un consultorio medico en el que puedan haber "n" número de pacientes y cada paciente pueda tener "n" número de consulta, cada paciente debe de tener infomación personal breve "nombre, edad, peso, etc..." y el programa debe permitir agregar nuevos pacientes, buscar pacientes y visualizar una ficha con las consultas de cada paciente la idea del programa seria algo como esto..

71041518_2514896611906560_4050969937626267648_n

Pero como se podria decir que aún soy estudiante no me avente a hacer ese de un inicio, asi que hice un proyecto para experimentar, mi suposicion es que se haria con un arreglo de objetos que lleve las consultas y otro arreglo que es el de personas que lleve a las personas y su arreglo de consultas, primero estoy haciendo un pequeño programa que tenga la clase consulta con todos sus datos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package prueba;
 
public class FConsulta {
    String nombre;
    int edad;
    float temperatura;
    float talla;
    int alergias;
 
 
    public FConsulta(){
 
    }
 
    public FConsulta(String nombre,int edad, float temperatura,float talla,int peso,int alergias){
 
        this.alergias=alergias;
        this.edad = edad;
        this.nombre = nombre;
        this.talla = talla;
        this.temperatura = temperatura;
 
 
 
    }
 
    public void imprimir(){
 
        System.out.println("El nombre es: " + nombre);
        System.out.println("La edad es: " + edad);
        System.out.println("La temperatura es: " + temperatura);
        System.out.println("Talla " + talla);
        System.out.println("Alergias " + alergias);
 
    }
 
}

otra clase que es la que administra el arreglo de este objeto (pense en hacerlo asi para posteriormente al hacer el arreglo de pacientes hacer el arreglo de esta clase)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package prueba;
 
import java.util.ArrayList;
 
public class AConsulta {
 
    String nombre;
    int edad;
    float temperatura;
    float talla;
    int alergias;
 
    ArrayList<FConsulta> FC = new ArrayList();
 
    public void AgregarConsulta(String nombre,int edad, float temperatura,float talla,int peso,int alergias){
 
        this.alergias=alergias;
        this.edad = edad;
        this.nombre = nombre;
        this.talla = talla;
        this.temperatura = temperatura;
 
 
 
    }
 
    public void Imprimir(){
 
        for(int i=0; i>= FC.size(); i++){
 
            FC.get(i) .imprimir();
 
        }
 
    }
 
}
Y finalmente el main, el error de mi programa yace aquí, ya que al momento de querer agregar datos al arreglo me sale el error unreachable statement
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package prueba;
 
import java.util.ArrayList;
import java.util.Scanner;
 
public class Prueba {
 
    public static void main(String[] args) {
 
        String nombre;
        int edad;
        float temperatura;
        float talla;
        int alergias;
        int opc,peso ;
 
        FConsulta aux = new FConsulta();
        AConsulta consultas = new AConsulta();
 
        Scanner sc = new Scanner(System.in);
        do {
 
            System.out.println("Buenas tardes! Qué desea hacer?");
            System.out.println("1.-Agregar Consulta");
            System.out.println("2.-Imprimir consultas");
            System.out.println("3.-Salir");
 
            opc = sc.nextInt();
 
            switch (opc) {
 
                case 1:
                    System.out.println("Edad: ");
                    edad = sc.nextInt();
                    System.out.println("Nombre: ");
                    nombre = sc.nextLine();
                    nombre = sc.nextLine();
                    System.out.println("Peso: ");
                    peso = sc.nextInt();
                    System.out.println("Temperatura: ");
                    temperatura = sc.nextFloat();
                    System.out.println("Talla: ");
                    talla = sc.nextFloat();
                    System.out.println("Alergias?: ");
                    alergias = sc.nextInt();
                    break;
 
                    consultas.AgregarConsulta(nombre, edad, temperatura, talla, peso, alergias);
 
                case 2:
                    aux.imprimir();
                    break;
 
            }
 
        } while (opc != 3);
 
    }
 
}
Como se puede observar creo que mi lógica aun no es la correcta o adecuada, podrían decirme mi error? o si de plano estoy muy mal darme una pequeña orientación, de verdad quiero aprender
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con ArrayList y como agregar datos

Publicado por Kabuto (1379 intervenciones) el 14/04/2020 01:08:01
EL mensaje de "Unreachable code", se debe a que agregas consulta DESPUES de la sentencia break;

1
2
3
4
5
System.out.println("Alergias?: ");
alergias = sc.nextInt();
break;
 
consultas.AgregarConsulta(nombre, edad, temperatura, talla, peso, alergias);

Entonces, te está avisando que esa línea JAMÁS se va a ejecutar, porque antes hay un break que pone fin al switch.

O sea, que para evitar ese error, tienes que agregar la consulta ANTES del break

1
2
3
4
System.out.println("Alergias?: ");
alergias = sc.nextInt();
consultas.AgregarConsulta(nombre, edad, temperatura, talla, peso, alergias);
break;

Cambiando eso ya podrá ejecutar el programa.
Sin embargo, hay otro problema.

Tu clase AConsulta, tiene un ArrayList, pero no le estás introduciendo ningún dato.
Esta clase, en realidad, no necesita tener los mismos atributos que la clase FConsulta.
Tan solo ha de tener el ArrayList, y que el método de agregar consulta, se encargue de eso, de guardar los datos de la consulta en el ArrayList.

Por cierto, el método Imprimir() está mal configurado el bucle.
Has puesto como condición que el indice i sea MAYOR o IGUAL que el tamaño del ArrayList.
Puesto así el bucle nunca se va a ejecutar
La i empieza con valor 0, 0 no va a ser MAYOR o IGUAL que el tamaño del ArrayList que si tiene consultas guardadas, su tamaño será como mínimo 1.
Así que el bucle no hará nada.

Lo correcto es que la condición para que el bucle se ejecute, y repita su ejecución, es que i la sea MENOR que el tamaño del ArrayList
Si el ArrayList tiene por ejemplo 3 consultas, es decir, su tamaño es 3.... las posiciones que la i puede consultar son 0, 1 y 2.
Por eso la i ha de ser menor que el tamaño del ArrayList.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.ArrayList;
 
public class AConsulta {
 
    private ArrayList<FConsulta> FC = new ArrayList<FConsulta>();
 
    public void AgregarConsulta(String nombre,int edad, float temperatura,float talla,int peso,int alergias){
 
    	//añadimos nuevo objeto FConsulta al ArrayList
    	FC.add(new FConsulta(nombre, edad, temperatura, talla, peso, alergias));
    }
 
    public void Imprimir(){
 
        for(int i=0; i < FC.size(); i++){
 
            FC.get(i).imprimir();
 
        }
 
    }
 
    }
 
}

Por último, en el case 2 del switch, ordenas imprimir el objeto aux

1
2
3
case 2:
  aux.imprimir();
 break;
aux es un objeto FConsulta, pero no es eso lo que queremos imprimir.

Queremos que se muestren las consultas que se han guardado en el ArrayList de AConsulta, por lo tanto, es a este a quien queremos pedir que se imprima.
De hecho, en esta clase Prueba, no necesitamos tampoco ningún objeto FConsulta.
Solo necesitamos un objeto AConsulta, que será quien se encargue de gestionar los objetos FConsulta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.Scanner;
 
public class Prueba {
 
    public static void main(String[] args) {
 
        String nombre;
        int edad;
        float temperatura;
        float talla;
        int alergias;
        int opc,peso ;
 
        AConsulta consultas = new AConsulta();
 
        Scanner sc = new Scanner(System.in);
        do {
 
            System.out.println("Buenas tardes! Qué desea hacer?");
            System.out.println("1.-Agregar Consulta");
            System.out.println("2.-Imprimir consultas");
            System.out.println("3.-Salir");
 
            opc = sc.nextInt();
 
            switch (opc) {
 
                case 1:
                    System.out.println("Edad: ");
                    edad = sc.nextInt();
                    System.out.println("Nombre: ");
                    nombre = sc.nextLine();
                    nombre = sc.nextLine();
                    System.out.println("Peso: ");
                    peso = sc.nextInt();
                    System.out.println("Temperatura: ");
                    temperatura = sc.nextFloat();
                    System.out.println("Talla: ");
                    talla = sc.nextFloat();
                    System.out.println("Alergias?: ");
                    alergias = sc.nextInt();
                    consultas.AgregarConsulta(nombre, edad, temperatura, talla, peso, alergias);
                    break;
 
                case 2:
                    consultas.Imprimir();
                    break;
 
            }
 
        } while (opc != 3);
 
        sc.close();
    }
 
}

Con todos estos cambios, el programa ya empieza a ser funcional
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Big
Val: 5
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con ArrayList y como agregar datos

Publicado por Big (2 intervenciones) el 14/04/2020 01:46:58

Socio! Muchas pero muchas gracias!



yo rompiendome la cabeza como loco cuando solo era que el añadir estaba debajo del break xD
lo de introducir datos al arraylist ya lo tenia pero como no solucionaba el error del agregar consulta que estaba bajo el break me puse loco y para hacer pruebas lo cambie xD me alegra saber que la lógica estaba bien ahí
lo de el imprimir el aux es porque me prive y queria hacer pruebas xD
muchas muchas gracias!!!!!

ahora intentare crear mi arreglo de el objeto AConsultas

si me llego a atorar puedo consultar con usted de nuevo? claro, sera como ultimo recurso, quiero ver si puedo hacer las cosas por mi mismo y por supuesto no molestarle.

Y como dije antes, me disculpo , apenas estoy empezando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con ArrayList y como agregar datos

Publicado por Kabuto (1379 intervenciones) el 14/04/2020 11:05:56
No hay nada de que disculparse. Todos hemos empezado sin saber y a veces escribiendo barbaridades.

Cuando te surjan nuevas dudas sigue publicándolas en este hilo, te seguiremos ayudando en lo que podamos.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con ArrayList y como agregar datos

Publicado por Rodrigo (623 intervenciones) el 14/04/2020 16:47:53
Otras 2 cosas que puedes considerar:

La funcion imprimir itera sobre el arreglo usando un indice, asi:
1
2
3
4
5
public void Imprimir(){
   for(int i=0; i < FC.size(); i++) {
       FC.get(i).imprimir();
   }
}

Pero puede usar la version "foreach", que evita el indice y directamente accede a cada uno de los elementos del contenedor, asi:
1
2
3
4
5
public void Imprimir(){
   for( FConsulta fc: FC ) {
       fc.imprimir();
   }
}

Una convencion (opcional), pero que hace mas facil leer los codigos es nombrar a las funciones con minuscula inicial y las clases con mayuscula inicial. Esta convencion ya la siguen las clases y funciones que estas usando, como ArrayList (clase) y println (funcion).
Si sigues esto, "Imprimir" deberia nombrarse "imprimir"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar