Java - Problema con Instancias de Objetos y Punteros.

   
Vista:

Problema con Instancias de Objetos y Punteros.

Publicado por Rock Storm rockstorm@gmx.com (2 intervenciones) el 18/02/2014 16:52:11
Hola buenas, mi problema es el siguiente: (me encontré en esta encrucijada con un problema más complejo que he tratado de simplificar al máximo, es decir, ya se que lo que hacen estas dos clases se puede hacer en una sola porque es muy simple, pero en el problema real no me es posible)

El problema consiste en dos clases, en el constructor de la segunda clase (la Clase B) se "instancia" un objeto de la clase ClassArray. Necesito, o me gustaría, poder usar esta instancia (que en el código se llama "newarray"), en el resto de métodos de la clase B. Ambas clases compilan sin problemas pero el método "manageNewArray" da un error como si el puntero "newarray" estuviese vacío. (En mi problema real hay más de un método que llama a métodos de "newarray").

¿Esto de inicializar la instancia de un objeto en el constructor y hacer uso de ella en el resto de métodos de la clase es posible?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class ClassB {
 
    private ClassArray newarray;
 
    public ClassB(int N) {
        ClassArray newarray = new ClassArray(N*2);
    }
 
    public void manageNewArray() {
        newarray.doubleArray();
        newarray.writeArray();
    }
 
    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        ClassB oneObject = new ClassB(N);
        oneObject.manageNewArray();
    }
}


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 ClassArray {
 
    private int[] array;
 
    public ClassArray(int N) {
        array = new int[N];
        for (int i=0; i<N; i++) array[i] = i;
    }
 
    public void writeArray() {
        for (int i=0; i<array.length; i++)
            System.out.print(array[i]);
            System.out.println();
    }
 
    public void doubleArray() {
        for(int i=0; i < array.length; i++) array[i] = i*2;
    }
 
    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        ClassArray onearray = new ClassArray(N);
        onearray.writeArray();
    }
}


El error que obtengo al ejecutar estas clases es este:
1
2
3
Exception in thread "main" java.lang.NullPointerException
        at ClassB.manageNewArray(ClassB.java:10)
        at ClassB.main(ClassB.java:17)
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

Problema con Instancias de Objetos y Punteros.

Publicado por Tom (911 intervenciones) el 19/02/2014 10:19:04
Repasa tu código, anda.
En realidad tienes 2 instancias de ClassArray en ClassB; una global a la clase, que no inicializas, y otra local en el constructor, que es la que inicializas y no sirve para nada.
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

Problema con Instancias de Objetos y Punteros.

Publicado por Rock Storm (2 intervenciones) el 19/02/2014 16:53:09
Es verdad! Muchas gracias, no me había percatado de esto :P
Por si alguien se encuentra con la misma duda para inicializar efectivamente la instancia global basta con eliminar en el código anterior "ClassArray", es decir donde pone:

1
ClassArray newarray = new ClassArray(N*2);

Eliminar el primer "ClassArray":

1
newarray = new ClassArray(N*2);
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