Como inicializar uma matriz em Java?


434

Estou inicializando uma 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};
    }     
}

O NetBeans aponta para um erro nesta linha:

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

Como posso resolver o problema?


3
Você pode substituir "int data [] = new int [10]" por "int data []". Você está desperdiçando memória lá.
missingfaktor

Respostas:


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

O acima não está correto (erro de sintaxe). Isso significa que você está atribuindo uma matriz adata[10] qual pode conter apenas um elemento.

Se você deseja inicializar uma matriz, tente usar o 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 a diferença entre as duas declarações. Ao atribuir uma nova matriz a uma variável declarada, newdeve ser usado.

Mesmo se você corrigir a sintaxe, o acesso data[10]ainda é incorreta (Você só pode acessar data[0]a data[9]causa do índice de matrizes em Java é baseado em 0). O acesso data[10]lançará uma ArrayIndexOutOfBoundsException .


2
Na verdade, a principal razão pela qual está incorreta é que é um erro de sintaxe! O AIOB aconteceria apenas se a sintaxe fosse aceitável.
Stephen C

1
Poderia me ajudar, se eu declarar uma matriz como esta: public static void product(int[] array){ int[] productArray = new int[array.length];e quiser definir todos os valores de productArray zero , o que devo escrever? (Eu acho que eu deveria escrever um loop e definir todos os valores a zero, há alguma maneira melhor de fazer isso?)
Hengameh

2
@ Hengameh: Inicializou em 0 por padrão. Consulte stackoverflow.com/a/2154340/1000655
Neal Gokli

39

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


1
+1. Você tem uma chave de abertura extra. Também se pode escrever: data [0] = 10; dados [1] = 20; .... after int data [] = new int [10], mas é muito código e acabará fazendo a mesma coisa.
Hamish Grubijan

28

Quando você cria uma matriz de tamanho 10, ela aloca 10 slots, mas de 0 a 9. Esse loop for pode ajudá-lo a ver um pouco melhor.

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;
        }
    }
}

16

Você pode fazer:

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

3
Pergunto-me que valor isso acrescenta à resposta aceita de 5 anos antes.
TylerH

12

Sintaxe

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

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

Exemplo:

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

8

Em vez de aprender sites não oficiais, aprenda no site da oracle

link a seguir: Clique aqui

* Você pode encontrar a inicialização e a declaração com a descrição 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 // tamanho da matriz 10 20 30 40 50 60 71 80 90 91

Exibindo dados:

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

Saída: 10 20 30 40 50 60 71 80 90 91


3

Você não pode inicializar uma matriz como essa. Além do que os outros sugeriram, você pode fazer:

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

3

Se você deseja inicializar uma matriz em um construtor, não pode usar esses inicializadores como.

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

Apenas mude para

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

Você não precisa especificar o tamanho com data[10] = new int[] { 10,...,91} Basta declarar a propriedade / campo int[] data;e inicializá-lo como acima. A versão corrigida do seu código teria a seguinte aparência:

public class Array {

    int[] data;

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

}

Como você vê, o suporte está vazio. Não há necessidade de informar o tamanho entre os colchetes, porque a inicialização e seu tamanho são especificados pela contagem dos elementos entre os colchetes.


2

você está tentando definir o décimo elemento do array para o array try

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

FTFY


0

Talvez isso 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};
    }
}

6
Como isso difere da pergunta? Por favor, estenda sua resposta!
Alexander Vogt

2
Inicializador de matriz não é permitido em construtores !!!! Você deve pelo menos teste suas propostas, antes de publicá-las ...
Sedat Kilinc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.