Java - Array de clases

 
Vista:
sin imagen de perfil

Array de clases

Publicado por Missael (3 intervenciones) el 30/09/2017 07:23:00
Tengo este código (solo pondré la parte que me da error):

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
import java.util.Scanner;
 
class DatosPersonales{
    String dtp_mat;
}
 
class Contactos{
    DatosPersonales datospersonales;
}
 
public class MClass {
 
    static int agr_cnt = 0;
    static Contactos contactos[] = new Contactos[10];
 
    public static void main(String[] args) {
        agregar();
    }
 
    public static void iniciar(){
        for(int i = 0; i < 10; i++){
            contactos[i] = new Contactos();
        }
    }
 
    public static void agregar(){
        MClass.iniciar();
        Scanner scan = new Scanner(System.in);
        System.out.println("Número de alumno: "+(agr_cnt+1));
        System.out.println("Introduce los datos solicitados");
        System.out.print("Matricula: ");
        contactos[agr_cnt].datospersonales.dtp_mat = scan.next();
    }
}

Funciona bien hasta que captura el número de matricula, después de eso me salta la excepción "java.lang.NullPointerException" y no entiendo el por que, ¿podrían ayudarme por favor?
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 Pedro
Val: 305
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array de clases

Publicado por Pedro (15 intervenciones) el 30/09/2017 11:14:36
Si a un objeto no inicializado (referencia null) se le trata de aplicar un método o se intenta hacerlo intervenir en un proceso que requiere un objeto inicializado, se obtiene una excepción tipo “NullPointerException”. Vamos a forzar que aparezca una excepción de este tipo. Para ello, crea dos clases y escribe el código que indicamos a continuación en cada una de ellas.

O_o
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

Array de clases

Publicado por Missael (3 intervenciones) el 30/09/2017 12:51:28
Se el por que sale la excepción NullPointerException, sin embargo cambie el código para iniciarlas antes de usarlas en el método agregar y sigue saliendo el mismo error, no se si es que no entiendo como iniciarlas desde java o algo así, te pasaré el código bien a ver si hice algo mal.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//Esta es la clase Contacos.java
public class Contactos{
 
    class Nombres{
        String nom_nms;
        String nom_app;
        String nom_apm;
    }
 
    class DatosPersonales{
        String dtp_mat;
        String dtp_gpo;
        String dtp_tec;
        String dtp_age;
    }
 
    class Telefonos{
        String tlf_hme;
        String tlf_cel;
    }
 
    class Social{
        String scl_fcb;
        String scl_twt;
        String scl_ins;
    }
 
    Nombres nombres;
    DatosPersonales datospersonales;
    Telefonos telefonos;
    Social social;
 
    public Contactos(){
        nombres.nom_apm = "";
        nombres.nom_app = "";
        nombres.nom_nms = "";
        datospersonales.dtp_age = "";
        datospersonales.dtp_gpo = "";
        datospersonales.dtp_mat = "";
        datospersonales.dtp_tec = "";
        telefonos.tlf_cel = "";
        telefonos.tlf_hme = "";
        social.scl_fcb = "";
        social.scl_ins = "";
        social.scl_twt = "";
    }
 
    public Contactos(String nom_nms, String nom_app, String nom_apm, String dtp_mat, String dtp_gpo, String dtp_tec, String dtp_age, String tlf_hme, String tlf_cel, String scl_fcb, String scl_twt, String scl_ins) {
        nombres.nom_nms = nom_nms;
        nombres.nom_app = nom_app;
        nombres.nom_apm = nom_apm;
        datospersonales.dtp_mat = dtp_mat;
        datospersonales.dtp_gpo = dtp_gpo;
        datospersonales.dtp_tec = dtp_tec;
        datospersonales.dtp_age = dtp_age;
        telefonos.tlf_hme = tlf_hme;
        telefonos.tlf_cel = tlf_cel;
        social.scl_fcb = scl_fcb;
        social.scl_twt = scl_twt;
        social.scl_ins = scl_ins;
    }
}
 
//Esta es la clase MClass.java (Clase principal)
import java.util.Scanner;
 
public class MClass {
 
    static int agr_cnt = 0;
    static Contactos contactos[] = new Contactos[10];
 
    public static void main(String[] args) {
        String swc, x = "0";
        Scanner scan = new Scanner(System.in);
        do{
            System.out.println("1 - Agregar contacto\n2 - Buscar contacto\n3 - Modificar contacto\n4 - Eliminar contacto\n5 - Salir");
            swc = scan.nextLine();
            switch(swc){
                case "1": agregar(); break;
                case "2": buscar(); break;
                case "3": modificar(); break;
                case "4": eliminar(); break;
                case "5": x = "1"; break;
                default: System.out.println("Ha introducido un caracter no válido, intentelo de nuevo.");break;
            }
        }while("0".equals(x));
    }
 
    public static void agregar(){
        String nom_nms,nom_app,nom_apm,dtp_mat,dtp_gpo,dtp_tec,dtp_age,tlf_hme,tlf_cel,scl_fcb,scl_twt,scl_ins;
        Scanner scan = new Scanner(System.in);
        System.out.println("Número de alumno: "+(agr_cnt+1));
        System.out.println("Introduce los datos solicitados");
        System.out.print("Matricula: "); dtp_mat = scan.nextLine();
        System.out.print("Nombre(s): "); nom_nms = scan.nextLine();
        System.out.print("Apellido paterno: "); nom_app = scan.nextLine();
        System.out.print("Apellido materno: "); nom_apm = scan.nextLine();
        System.out.print("Grupo: "); dtp_gpo = scan.nextLine();
        System.out.print("Carrera: "); dtp_tec = scan.nextLine();
        System.out.print("Edad: "); dtp_age = scan.nextLine();
        System.out.print("Teléfono móvil: "); tlf_cel = scan.nextLine();
        System.out.print("Teléfono de casa: "); tlf_hme = scan.nextLine();
        System.out.print("Facebook: "); scl_fcb = scan.nextLine();
        System.out.print("Twitter: "); scl_twt = scan.nextLine();
        System.out.print("Instagram: "); scl_ins = scan.nextLine();
        contactos[agr_cnt] = new Contactos(nom_nms,nom_app,nom_apm,dtp_mat,dtp_gpo,dtp_tec,dtp_age,tlf_hme,tlf_cel,scl_fcb,scl_twt,scl_ins);
    }
}
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

Array de clases

Publicado por Missael (3 intervenciones) el 01/10/2017 00:43:58
Ya logre resolverlo, el problema estaba en como se guardaba la clase
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Esta es la clase Contactos.java
public class Contactos{
    class DatosPersonales{
        String dtp_mat;
        String dtp_gpo;
        String dtp_tec;
        String dtp_age;
        DatosPersonales(String dtp_mat,String dtp_gpo,String dtp_tec,String dtp_age){
            this.dtp_mat = dtp_mat;
            this.dtp_gpo = dtp_gpo;
            this.dtp_tec = dtp_tec;
            this.dtp_age = dtp_age;
        }
    }
    Nombres nombres;
    DatosPersonales datospersonales;
    Telefonos telefonos;
    Social social;
    Contactos(String dtp_mat, String dtp_gpo, String dtp_tec, String dtp_age) {
        datospersonales = new DatosPersonales(dtp_mat,dtp_gpo,dtp_tec,dtp_age);
    }
}

De esta manera ya funciona el programa
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