Java - DUPLICAR VALORES EN ARREGLO DE OBJETOS

 
Vista:
sin imagen de perfil
Val: 20
Ha aumentado su posición en 20 puestos en Java (en relación al último mes)
Gráfica de Java

DUPLICAR VALORES EN ARREGLO DE OBJETOS

Publicado por Rodrigo (10 intervenciones) el 08/07/2021 06:07:09
Qué tal, buen día.

Busco realizar el siguiente problema:

Calcular el costo total de colegiatura que deberán pagar 3 padres de familia.

El problema debe desarrollarse así:

1. Pedir nombre del padre
2. Pedir el total de hijos
3. Seleccionar los niveles académicos de los hijos.
KINDER - PRIMARIA - SECUNDARIA
Nota: en caso de que sea primaria, deberá elegir el grado académico
Repetir los pasos 1 al 3 para que se capture la información de 3 padres de familia

No logro hacer que me imprima los resultados cuando tengo dos hijos, siempre me imprime el último.

Este es mi código:

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package Escuela;
 
public class Colegio {
    private String nombre;
    private int hijos;
    private String nivelAcademico;
    private int grado;
 
    public Colegio(){
        nombre="";
        hijos=0;
        nivelAcademico = "";
        grado=0;
 
    }
 
    public Colegio(String n,int h,String na,int g){
        nombre=n;
        hijos=h;
        nivelAcademico = na;
        grado=g;
    }
    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }
 
    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    /**
     * @return the hijos
     */
    public int getHijos() {
        return hijos;
    }
 
    /**
     * @param hijos the hijos to set
     */
    public void setHijos(int hijos) {
        this.hijos = hijos;
    }
 
    /**
     * @return the nivelAcademico
     */
    public String getNivelAcademico() {
        return nivelAcademico;
    }
 
    /**
     * @param nivelAcademico the nivelAcademico to set
     */
    public void setNivelAcademico(String nivelAcademico) {
        this.nivelAcademico = nivelAcademico;
    }
 
    /**
     * @return the grado
     */
    public int getGrado() {
        return grado;
    }
 
    /**
     * @param grado the grado to set
     */
    public void setGrado(int grado) {
        this.grado = grado;
    }
 
}

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
package Escuela;
 
import javax.swing.JOptionPane;
 
public class Principal {
    public static void main(String[]args){
        Colegio c [] = new Colegio[3];
 
        String nombre="";
        int hijos=0;
        String nivelAcademico="";
        int grado=0;
 
        for(int i = 0;i<3;i++){
            nombre = JOptionPane.showInputDialog(null,"Introduce tu nombre, padre de familia:");
            hijos = Integer.parseInt(JOptionPane.showInputDialog(null,"¿Cuántos hijos tienes en la institución?"));
            int cont = 0;
            System.out.println(hijos);
 
            do{
                int opcion = JOptionPane.showOptionDialog(null,"Elige el nivel de estudio de tu hijo no. "+cont,"",JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE,null,new Object[]{"Kinder","Primaria","Secundaria"},"Kinder");
                if(opcion==0){
                    nivelAcademico = "Kinder";
                    cont = cont + 1;
                    grado = 0;
                }
                if(opcion==1){
                    nivelAcademico = "Primaria";
                    grado = Integer.parseInt(JOptionPane.showInputDialog(null,"Elige el grado: \n 1,2,3,4,5,6"));
                    cont = cont + 1;
 
                }
                if(opcion==2){
                    nivelAcademico = "Secundaria";
                    grado = 0;
                    cont = cont + 1;
 
                }
            }while(cont<hijos);
 
            c[i]= new Colegio(nombre,hijos,nivelAcademico,grado);
        }
 
        for(int i = 0;i<c.length;i++){
            System.out.println(""+c[i].getNombre()+" "+c[i].getHijos()+" "+c[i].getNivelAcademico()+" "+c[i].getGrado());
        }
    }
 
}

Muchas gracias de antemano, un abrazo.
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

DUPLICAR VALORES EN ARREGLO DE OBJETOS

Publicado por Kabuto (1381 intervenciones) el 08/07/2021 14:08:17
Hola.

Tu clase Colegio, que sería más apropiado que se llamase PadreFamilia o algo similar, tiene el problema de que solo guarda 1 nivel académico, aunque se tengan 2 hijos, 3 hijos o 50 hijos....

El atributo nivel académico quizás debería ser un arreglo. Porque un padre puede tener varios hijos y cada uno de esos hijos tendrá distintos niveles académicos.
Es decir, un padre puede tener cinco hijos: uno en secundaria, dos en primaria y otros dos en kinder...

Así que la clase Colegio ha de poder almacenar estas posibilidades, y por tanto, el atributo nivel académico debiera ser un arreglo cuyo tamaño dependa de la cantidad de hijos.

Lo mismo ocurre con el atributo grado, si se tiene más de un hijo en primaria, hay que poder guardar distintos grados.

Así que se me ocurren dos posibilidades:

- usar dos arreglos, uno para "nivel académico" y otro para "grado".

- Crear otra clase llamada NivelAcademico, con un atributo String para el tipo de nivel (Secundaria, Primaria o Kinder) y otro atributo int para el grado académico. Si no se trata de un "nivel Primaria", el "grado académico" puede quedarse con valor 0 porque no influye.
De este modo, la clase Colegio solo necesitaría un arreglo de la clase NivelAcademico cuya longitud dependa de la cantidad de hijos.


Esto también complica un poco la petición de datos, pues habrá que pedir los datos académicos de los hijos y usar un arreglo para guardar los datos y luego lo asignamos al objeto Colegio mediante constructor.

En fin, dale un par de vueltas a ver si logras darle solución. Yo luego intentaré hacer una propuesta para resolverlo.
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

DUPLICAR VALORES EN ARREGLO DE OBJETOS

Publicado por Kabuto (1381 intervenciones) el 08/07/2021 14:54:44
Ok, dejo por aquí mi propuesta.

¡¡Insisto en la importancia de que primero intentes resolverlo tú!!

Si no lo consigues, pues pregunta lo que sea o bien mira el código que pongo a continuación por si te sirve de inspiración.


La idea de crear una clase NivelAcademico me parece la más idónea y facilita las cosas.
Incluye un método toString() para indicar como ha de mostrarse en pantalla. El dato del grado solo se muestra si se trata de un nivel Primaria

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class NivelAcademico {
 
	private String nivel; // Secundaria, Primaria, Kinder
	private int grado; //Solo para nivel Primaria
 
	public NivelAcademico(String nivel, int grado) {
		this.nivel = nivel;
		this.grado = grado;
	}
 
	@Override
	public String toString() {
		//Si grado es 0, es que no es Primaria y el grado no es un dato a mostrar
		return "Nivel: " + nivel + (grado==0?"":(" Grado:" + grado));
	}
}



Luego una clase PadreFamilia con nombre, cantidad de hijos y un array de NivelAcademico para poder guardar los distintos niveles académicos de los hijos que pueda tener este padre.
También incluye método toString(), que construye la cadena a mostrar en pantalla según la cantidad de hijos

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
public class PadreFamilia {
 
	private String nombre;
	private int hijos;
	private NivelAcademico[] niveles;
 
	public PadreFamilia(String nombre, int hijos, NivelAcademico[] niveles) {
		this.nombre = nombre;
		this.hijos = hijos;
		this.niveles = niveles;
	}
 
	@Override
	public String toString() {
		StringBuilder cadena = new StringBuilder();
		cadena.append("Nombre: " + nombre);
		cadena.append("\nHijos: " + hijos);
		cadena.append("\nDatos academicos:");
		for (int hijo = 0; hijo < hijos; hijo++)
			cadena.append("\nHijo #" + (hijo+1) + "  " + niveles[hijo]);
 
		return cadena.toString();
	}
 
}

Y ya por último la clase Principal para registrar tres padres con los datos de sus hijos.
Durante la petición de datos, tras preguntar por el número de hijos se crea un array de NivelAcademico y se piden los datos de cada hijo.
Cuando ya se tiene todo, es cuando se construye el objeto PadreFamilia.

Luego al final se muestra en pantalla todos los datos registrados.

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
public class Principal {
 
	public static void main(String[] args) {
 
		PadreFamilia[] padres = new PadreFamilia[3];
 
		for (int p = 0; p < padres.length; p++) {
			String nombre = JOptionPane.showInputDialog(null,"Introduce tu nombre, padre de familia:");
			int hijos = Integer.parseInt(JOptionPane.showInputDialog(null,"¿Cuántos hijos tienes en la institución?"));
			//Array para niveles académicos de los hijos
			NivelAcademico[] niveles = new NivelAcademico[hijos];
			//Pedimos datos de los niveles academicos
			for (int n = 0; n < hijos; n++) {
				int opcion = JOptionPane.showOptionDialog(null,"Elige el nivel de estudio de tu hijo no. "+(n+1),"Nivel Académico",
						JOptionPane.DEFAULT_OPTION,JOptionPane.QUESTION_MESSAGE,null,new Object[]{"Kinder","Primaria","Secundaria"},"Kinder");
				switch(opcion) {
				case 0:
					niveles[n] = new NivelAcademico("Kinder", 0);
					break;
				case 1: //Primaria, hay que pedir el grado
					int grado = Integer.parseInt(JOptionPane.showInputDialog(null,"Elige el grado: \n 1,2,3,4,5,6"));
					niveles[n] = new NivelAcademico("Primaria", grado);
					break;
				case 2:
					niveles[n] = new NivelAcademico("Secundaria", 0);
					break;
				}
			}
			//Ya tenemos los datos academicos de los hijos de este padre
			padres[p] = new PadreFamilia(nombre, hijos, niveles);
		}
 
		//Tres padres registrados, mostramos la lista
 
		System.out.println("\n\n\t\tDATOS REGISTRADOS\n");
		for (PadreFamilia padre: padres) {
			System.out.println("----------------------");
			System.out.println(padre);
			System.out.println("----------------------\n");
		}
	}
 
}


En pantalla, tenemos este resultado:
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
DATOS REGISTRADOS
 
----------------------
Nombre: Pedro
Hijos: 3
Datos academicos:
Hijo #1  Nivel: Kinder
Hijo #2  Nivel: Primaria Grado:1
Hijo #3  Nivel: Secundaria
----------------------
 
----------------------
Nombre: Luis
Hijos: 1
Datos academicos:
Hijo #1  Nivel: Secundaria
----------------------
 
----------------------
Nombre: Ramón
Hijos: 5
Datos academicos:
Hijo #1  Nivel: Kinder
Hijo #2  Nivel: Primaria Grado:1
Hijo #3  Nivel: Primaria Grado:3
Hijo #4  Nivel: Primaria Grado:6
Hijo #5  Nivel: Secundaria
----------------------


Y listo, cualquier duda solo hay que preguntarla.
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
sin imagen de perfil
Val: 20
Ha aumentado su posición en 20 puestos en Java (en relación al último mes)
Gráfica de Java

DUPLICAR VALORES EN ARREGLO DE OBJETOS

Publicado por Rodrigo (10 intervenciones) el 08/07/2021 19:00:42
Muchas gracias amigo, como siempre sacándome el apuro jaja.
Haré las correcciones pertinentes y lo comento.

Un abrazo y gracias nuevamente.
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