Java - como agregar un registro solo cuando lo indique en el menu y no todos de una

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

como agregar un registro solo cuando lo indique en el menu y no todos de una

Publicado por pepe (15 intervenciones) el 05/05/2021 05:24:08
Buneo mi duda es esa yo declare un arreglo de 3 registros solo pero no quiero que se muestren los 3 de una si no 1 y se vuelva a abrir el menu y ya si vuelve a agregar otro y asi hasta tener 3 pero cuando le pongo en agregar se me muestran los 3 de una y asi no quiero :C miren les dejo mi codigo
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
Trabajador_ADCS tra = new Trabajador_ADCS();
     Trabajador_ADCS T[] = new Trabajador_ADCS[3];
     Docente_ADCS Do = new Docente_ADCS();
     Docente_ADCS D[] = new Docente_ADCS[3];
     Administrativo_ADCS A = new Administrativo_ADCS();
     Administrativo_ADCS Ad[] = new Administrativo_ADCS[3];
     int opc;
 
     do {
         opc = Menu_ADCS.menu();
         switch(opc)
         {
             case 1:
             {
 
                 JOptionPane.showMessageDialog(null,"Agregar un Docente....");
                      for(i=0; i<D.length; i++)
                        {
                            nombre = JOptionPane.showInputDialog("Ingresa tu nombre");
                            domicilio = JOptionPane.showInputDialog("Ingresa tu domicilio");
                            edoCivil = JOptionPane.showInputDialog("Ingresa tu Estado Civil");
                            edad = Integer.parseInt(JOptionPane.showInputDialog("Ingresa tu edad"));
                            email = JOptionPane.showInputDialog("Ingresa tu Email");
                            carreraProf = JOptionPane.showInputDialog("Ingresa tu Carrera Profesional");
                            aniotitulacion = Double.parseDouble(JOptionPane.showInputDialog("Ingresa tu Año de titulacion"));
                            cedulaProf = Double.parseDouble(JOptionPane.showInputDialog("Ingresa tu cedula"));
                            D[i] = new Docente_ADCS(aniotitulacion,cedulaProf,edad,nombre,domicilio,carreraProf,edoCivil,email);
                        }
             }break;
hay mas pues pero es lo mismo nomas cambia el agregar a otro tipo pero es lo mismo no se que hacer :C
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

como agregar un registro solo cuando lo indique en el menu y no todos de una

Publicado por Kabuto (1381 intervenciones) el 05/05/2021 11:31:31
Lo hace tres veces porque estás usando un bucle for.

Para no tener que usar ningún bucle, puedes declarar una índice por separado para los Docentes (y otro para Administrativos, otro para Trabajadores...)
Este índice comienza con valor 0 y cada vez que agregues un Docente, lo incrementas en 1.
Así el primer Docente se registrará en el elemento 0, el siguiente en el 1, y el último en 2.

Además, así puedes controlar mejor cuándo se han registrado los tres Docentes que admite tu programa, si se intenta registrar un cuarto Docente, podrás evitarlo.

Algo como esto:

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
Trabajador_ADCS tra = new Trabajador_ADCS();
     Trabajador_ADCS T[] = new Trabajador_ADCS[3];
     Docente_ADCS Do = new Docente_ADCS();
     Docente_ADCS D[] = new Docente_ADCS[3];
     Administrativo_ADCS A = new Administrativo_ADCS();
     Administrativo_ADCS Ad[] = new Administrativo_ADCS[3];
     int opc;
     //Índices para los arrays
     int indiceDocentes = 0;
 
     do {
         opc = Menu_ADCS.menu();
         switch(opc)
         {
             case 1:
             {
                  if (indiceDocentes >= 3)
                      JOptionPane.showMessageDialog(null,"Ya hay 3 Docentes registrados");
                  else {
                      JOptionPane.showMessageDialog(null,"Agregar un Docente....");
                      nombre = JOptionPane.showInputDialog("Ingresa tu nombre");
                      domicilio = JOptionPane.showInputDialog("Ingresa tu domicilio");
                      edoCivil = JOptionPane.showInputDialog("Ingresa tu Estado Civil");
                      edad = Integer.parseInt(JOptionPane.showInputDialog("Ingresa tu edad"));
                      email = JOptionPane.showInputDialog("Ingresa tu Email");
                      carreraProf = JOptionPane.showInputDialog("Ingresa tu Carrera Profesional");
                      aniotitulacion = Double.parseDouble(JOptionPane.showInputDialog("Ingresa tu Año de titulacion"));
                      cedulaProf = Double.parseDouble(JOptionPane.showInputDialog("Ingresa tu cedula"));
                      D[indiceDocentes] = new Docente_ADCS(aniotitulacion,cedulaProf,edad,nombre,domicilio,carreraProf,edoCivil,email);
                      //Docente registrado, incrementamos el índice
                      indiceDocentes++;
                  }
             }break;
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
sin imagen de perfil
Val: 27
Ha aumentado su posición en 37 puestos en Java (en relación al último mes)
Gráfica de Java

como agregar un registro solo cuando lo indique en el menu y no todos de una

Publicado por pepe (15 intervenciones) el 05/05/2021 15:11:07
Ya me salio amigo muchas gracias!!!! y oye para mostrar los datos si me sale pero siento que habria una forma mas eficiente de mostrar los datos de cada registro pero poner tanto codigo pero no supe como e investigue pero no mira esta es la parte de mostrar los datos y si me lo muestra bien y todo pero no se como se haria mira.
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
case 4:
{
    JOptionPane.showMessageDialog(null,"Ver Docentes");
    JOptionPane.showMessageDialog(null,
     "Nombre: " + D[0].getNombre() + "\n" +
     "Domicilio: " + D[0].getDomicilio() + "\n" +
     "Estado Civil: " + D[0].getEdoCivil() + "\n" +
     "email: " + D[0].getEmail() + "\n" +
     "Carrera Profesional: " +D[0].getCarreraProf() + "\n" +
     "Año de titulacion: " + D[0].getAnioTitulacion() + "\n" +
     "Cedula Profesional: " +D[0].getCedulaProf() + "\n" + "\n" +
 
     "Nombre: " + D[1].getNombre() + "\n" +
     "Domicilio: " + D[1].getDomicilio() + "\n" +
     "Estado Civil: " + D[1].getEdoCivil() + "\n" +
     "email: " + D[1].getEmail() + "\n" +
     "Carrera Profesional: " +D[1].getCarreraProf() + "\n" +
     "Año de titulacion: " + D[1].getAnioTitulacion() + "\n" +
     "Cedula Profesional: " +D[1].getCedulaProf() + "\n" + "\n" + "\n" +
 
     "Nombre: " + D[2].getNombre() + "\n" +
     "Domicilio: " + D[2].getDomicilio() + "\n" +
     "Estado Civil: " + D[2].getEdoCivil() + "\n" +
     "email: " + D[2].getEmail() + "\n" +
     "Carrera Profesional: " +D[2].getCarreraProf() + "\n" +
     "Año de titulacion: " + D[2].getAnioTitulacion() + "\n" +
     "Cedula Profesional: " +D[2].getCedulaProf() + "\n" + "\n");
}break;
o afuerzas tengo que poner los 3 y el D[] ?
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
sin imagen de perfil
Val: 27
Ha aumentado su posición en 37 puestos en Java (en relación al último mes)
Gráfica de Java

como agregar un registro solo cuando lo indique en el menu y no todos de una

Publicado por pepe (15 intervenciones) el 05/05/2021 15:59:32
porque de hecho me acabo de dar cuenta y tenen que estar los 3 registros para poder verlos porque si nomas he agregado 1 y quiero que me lo muestre me aparece este error
1
2
3
4
5
run:
Exception in thread "main" java.lang.NullPointerException
	at Control_ADCS.App_RH.main(App_RH.java:111)
C:\Users\aryda\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 15 seconds)
y supongo que es por que estan vacios los demas espacios
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

como agregar un registro solo cuando lo indique en el menu y no todos de una

Publicado por Kabuto (1381 intervenciones) el 06/05/2021 01:14:00
Vale. Varias cosas.

Lo primero, para ahorrar líneas de código, lo ideal es que en tu clase Docente sobreescribas el método toString().
Este método se usa para que el programador decida como quiere mostrar los datos de la clase en pantalla, construyendo un único String.
Así, luego en el programa principal, cada objeto Docente sabe como ha de construir ese String y cuando se lo pidamos, lo podemos mostrar en un System.out.println(), en un JOptionPane,... o donde queramos.

No se cómo es tu clase Docente, pero te pongo un ejemplo de cómo podría ser dicho método toString():

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
public class Docente {
    private String nombre;
    private String domicilio;
    private String estadoCivil;
    private String eMail;
    private String carreraProf;
    private String anioTitula;
    private String cedulaProf;
 
    //Cosntructores
 
    //Métodos get y set...
 
    //Método toString
    @Override
    public String toString() {
        return "Nombre: " + nombre + "\n" +
     "Domicilio: " + domicilio + "\n" +
     "Estado Civil: " + estadoCivil + "\n" +
     "email: " + eMail + "\n" +
     "Carrera Profesional: " + carreraProf + "\n" +
     "Año de titulacion: " + anioTitula + "\n" +
     "Cedula Profesional: " + cedulaProf + "\n";
    }
 
}

Fíjate que es prácticamente el mismo código que has puesto en el JOptionPane, solo que ahora basta con escribirlo una sola vez dentro de la clase Docente. Y de este modo, cualquier programa que necesitase trabajar con tu clase Docente, ya dispone de una forma sencilla de mostrar los datos en pantalla.

Bien, respecto a mostrar los tres Docentes.
Efectivamente, tal y como lo has hecho, estás obligado a crear tres Docentes para poder mostrar los datos, ya que en tu código, en el JOptionPane haces referencia a los tres Docentes. Entonces, si te falta alguno, te lanza la excepción NullPointer, que básicamente significa que has intentado "apuntar" a objetos con valor nulo, es decir, los Docentes no registrados.

Obviamente hay que cambiar la estrategia. Y para esto, de nuevo se puede aprovechar el indice que propuse en mi mensaje anterior.

En lugar de construir un JOptionPane "obligatoriamente" con los tres Docentes, podemos valernos del indiceDocentes para añadir solo el número de Docentes que realmente han sido registrados.
De hecho, podemos preguntar si hay 0 Docentes, para informar de que NO hay Docentes registrados.
Si no es 0, pues con un bucle construimos un String con SOLO los Docentes existentes.
Este String podemos construirlo mediante la clase StringBuilder, a quien irémos añadiendo el resultado de llamar al método toString() de cada objeto Docente

Algo como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
case 4:
        JOptionPane.showMessageDialog(null,"Ver Docentes");
        //Construimos con StringBuilder, un String para el JOptionPane
        // que contenga SOLO los Docentes existentes
        StringBuilder mensaje = new StringBuilder();
        if (indiceDocentes == 0)
            mensaje.append("No hay Docentes registrados");
        else {
            for (int c = 0; c < indiceDocentes; c++) {
                mensaje.append(D[c].toString()); //Invocamos método toString() de la clase Docente
                mensaje.append("\n"); //Salto de línea
            }
        }
        //Mensaje construido, lo mostramos
        JOptionPane.showMessageDialog(null, mensaje.toString()); //El objeto StringBuilder tiene su propio método toString()
        break;

De esta manera, ahorramos líneas de código y además nos aseguramo de que funcione para cualquier número de Docentes registrados.

Pruébalo, si algo falla o algo no lo entiendes, coméntalo por aquí y lo aclaramos
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
0
Comentar