2011-11-09 16 views
60

tengo una clase y en esa clase tengo esto:Java inicializar una matriz int en un constructor

//some code 
private int[] data = new int[3]; 
//some code 

Luego, en mi constructor:

public Date(){ 
    data[0] = 0; 
    data[1] = 0; 
    data[2] = 0; 
} 

Si hago esto, todo está bien . valores de datos por defecto se inicializan pero si en lugar de hacer esto:

public Date(){ 
    int[] data = {0,0,0}; 
} 

Dice:

Local variable hides a field 

¿Por qué?

¿Cuál es la mejor manera de inicializar una matriz dentro del constructor?

gracias

+0

espero que son conscientes del concepto de ámbito de variable? su variable 'data' after' "// some code" 'tiene un alcance de toda la clase. mientras que la variable 'data' en el constructor tiene un alcance dentro del constructor. y una vez que el constructor termina, la variable se destruirá. Y también la variable 'data' dentro del constructor oculta la variable con el mismo nombre en la clase. Esto justifica el error 'La variable local oculta un campo' –

Respuesta

127
private int[] data = new int[3]; 

Esto ya inicializa los elementos de la matriz en 0. No necesita repetir eso nuevamente en el constructor.

en su constructor que debe ser:

data = new int[]{0, 0, 0}; 
+0

Sí. Esta fue la única forma en que me lo permitió. Poner solo datos; dijo que "no es una declaración". Gracias – Favolas

+0

¿No puede usar 'data = new int [3]' en el constructor defualt 'Date()'? – parsecer

4

por qué no simplemente

public Date(){ 
    data = new int[]{0,0,0}; 
} 

la razón por la que tiene el error se debe a que int[] data = ... declara una nueva variable y esconde el campo data

Sin embargo hay que señalar que el contenido de la matriz ya está inicializada en 0 (el valor predeterminado de int)

0

en su constructor va a crear otra int matriz:

public Date(){ 
    int[] data = {0,0,0}; 
    } 

Prueba esto:

data = {0,0,0}; 

NOTA: Por cierto NO es necesario para inicializar los elementos de la matriz si se declara como una variable de instancia . Las variables de instancia obtienen automáticamente sus valores predeterminados, que para una matriz de enteros, los valores predeterminados son todos ceros.

Si tuvieras una matriz declarada localmente, necesitarían inicializar cada elemento.

0

La mejor manera es no escribir ningún enunciado de inicialización. Esto se debe a que si escribe int a[]=new int[3], de forma predeterminada, en Java, todos los valores de la matriz, es decir, a[0], a[1] y a[2], se inicializan en 0. En cuanto a la variable local que oculta un campo, publique todo su código para que podamos llegar a una conclusión.

6

Usted podría hacer

public class Data { 

    private int[] data; 

    public Data() { 

    data = new int[] { 0, 0, 0 }; 
    } 
} 

el cual inicializa data en el constructor, o

public class Data { 

    private int[] data = new int[] {0,0,0}; 

    public Data() { 

    // data already initialised 
    } 

}

que inicializa data antes de que se ejecute el código en el constructor.

+0

Tengo que poner data = new int [] {0,0,0}; dentro del constructor Si me inicializo antes del código en el constructor poniendo solo datos; dentro del constructor me dio el error "no a una declaración" – Favolas

+0

si hay más de un millón de elementos en la matriz ... le gustaría usar el primer código y cambiar la línea 'pública Data() arroja Error {' si se lanza 'OutOfMemoryError'. –

4

Esto se debe a que, en el constructor, ha declarado una variable local con el mismo nombre que un atributo.

para asignar una matriz de enteros que todos los elementos se inicializan a cero, escribir esto en el constructor:

data = new int[3]; 

para asignar una matriz de enteros que tiene otros valores iniciales, poner este código en el constructor:

int[] temp = {2, 3, 7}; 
data = temp; 

o:

data = new int[] {2, 3, 7}; 
Cuestiones relacionadas