¿Cómo inicializar una matriz en Java?

434

Estoy inicializando una matriz como esta:

public class Array {

    int data[] = new int[10]; 
    /** Creates a new instance of Array */
    public Array() {
        data[10] = {10,20,30,40,50,60,71,80,90,91};
    }     
}

NetBeans apunta a un error en esta línea:

data[10] = {10,20,30,40,50,60,71,80,90,91};

¿Cómo puedo resolver el problema?

hablador
fuente
3
Puede reemplazar ese "int data [] = new int [10]" por "int data []". Estás desperdiciando memoria allí.
missingfaktor

Respuestas:

642
data[10] = {10,20,30,40,50,60,71,80,90,91};

Lo anterior no es correcto (error de sintaxis). Significa que está asignando una matriz a la data[10]que puede contener solo un elemento.

Si desea inicializar una matriz, intente usar Array Initializer :

int[] data = {10,20,30,40,50,60,71,80,90,91};

// or

int[] data;
data = new int[] {10,20,30,40,50,60,71,80,90,91};

Observe la diferencia entre las dos declaraciones. Al asignar una nueva matriz a una variable declarada, newdebe usarse.

Incluso si corrige la sintaxis, el acceso data[10]sigue siendo incorrecta (sólo se puede acceder data[0]a la data[9]causa índice de arrays en Java es 0 basado en uno). El acceso data[10]arrojará una ArrayIndexOutOfBoundsException .

Prasoon Saurav
fuente
2
En realidad, la razón principal por la que es incorrecta es que es un error de sintaxis. El AIOB solo ocurriría si la sintaxis fuera aceptable.
Stephen C
1
¿Podría por favor ayudarme? Si declaro una matriz como esta: public static void product(int[] array){ int[] productArray = new int[array.length];y quiero establecer todos los valores de productArray cero , ¿qué debo escribir? (Creo que debería escribir un bucle y establecer todos los valores a cero, ¿hay alguna forma mejor de hacer esto?)
Hengameh
2
@Hengameh: se inicializa a 0 de forma predeterminada. Ver stackoverflow.com/a/2154340/1000655
Neal Gokli
39

Tratar data = new int[] {10,20,30,40,50,60,71,80,90,91 };

Dean Povey
fuente
1
+1. Tienes una llave de apertura adicional. También se puede escribir: datos [0] = 10; datos [1] = 20; .... después de int data [] = new int [10], pero es demasiado código y terminará haciendo lo mismo.
Hamish Grubijan
28

Cuando crea una matriz de tamaño 10, asigna 10 espacios, pero de 0 a 9. Esto para el bucle podría ayudarlo a verlo un poco mejor.

public class Array {
    int[] data = new int[10]; 
    /** Creates a new instance of an int Array */
    public Array() {
        for(int i = 0; i < data.length; i++) {
            data[i] = i*10;
        }
    }
}
Bernie Pérez
fuente
16

Tu puedes hacer:

int[] data = {10,20,30,40,50,60,71,80,90,91};

fuente
3
Me pregunto qué valor agrega esto además de la respuesta aceptada de 5 años antes.
TylerH
12

Sintaxis

 Datatype[] variable = new Datatype[] { value1,value2.... }

 Datatype variable[]  = new Datatype[] { value1,value2.... }

Ejemplo:

int [] points = new int[]{ 1,2,3,4 };
Vinayak
fuente
8

En lugar de aprender sitios web no oficiales, aprenda del sitio web de Oracle

enlace siguiente: Haga clic aquí

* Puede encontrar la inicialización y la declaración con la descripción completa *

int n; // size of array here 10
int[] a = new int[n];
for (int i = 0; i < a.length; i++)
{
    a[i] = Integer.parseInt(s.nextLine()); // using Scanner class
}

Entrada : 10 // tamaño de matriz 10 20 30 40 50 60 71 80 90 91

Mostrar datos:

for (int i = 0; i < a.length; i++) 
{
    System.out.println(a[i] + " ");
}

Salida: 10 20 30 40 50 60 71 80 90 91

Shiva Nandam Sirmarigari
fuente
3

No puede inicializar una matriz como esa. Además de lo que otros han sugerido, puede hacer:

data[0] = 10;
data[1] = 20;
...
data[9] = 91;
fastcodejava
fuente
3

Si desea inicializar una matriz en un constructor, no puede usar esos inicializadores de matriz como.

data= {10,20,30,40,50,60,71,80,90,91};

Solo cámbialo a

data = new int[] {10,20,30,40,50,60,71,80,90,91};

No tiene que especificar el tamaño con data[10] = new int[] { 10,...,91} Simplemente declare la propiedad / campo con int[] data;e inicialícelo como se indicó anteriormente. La versión corregida de su código se vería así:

public class Array {

    int[] data;

    public Array() {
        data = new int[] {10,20,30,40,50,60,71,80,90,91};
    }

}

Como ves, el soporte está vacío. No es necesario indicar el tamaño entre los corchetes, porque la inicialización y su tamaño están especificados por el recuento de los elementos entre los corchetes.

Sedat Kilinc
fuente
2

intenta establecer el décimo elemento de la matriz en la prueba de matriz

data = new int[] {10,20,30,40,50,60,71,80,90,91};

FTFY

schubySteve
fuente
0

Quizás esto funcione:

public class Array {

    int data[] = new int[10]; 
    /* Creates a new instance of Array */
    public Array() {
        data= {10,20,30,40,50,60,71,80,90,91};
    }
}
Sajjad Behravesh
fuente
66
¿Cómo difiere esto de la pregunta? ¡Por favor extiende tu respuesta!
Alexander Vogt
2
¡El inicializador de matriz no está permitido en constructores! Al menos debería probar sus propuestas, antes de publicarlas ...
Sedat Kilinc