Isso não foge a sintaxe do Java?

O código abaixo funciona, mas aqui fica uma dúvida minha, talvéz alguem possa responder:

quando eu declaro um array escrevo

String z[] - Tipo referência[]; e inicializo com - new String[4] - Tipo[tamanho];



No código eu quero criar um array z[4][3][3], portanto declaro

String[][] z[] - Tipo(String[][]) referência[]; e no meu ponto de vista deveria inicializar com - new String[][][4], ou pelo menos

String[3][3][4], para manter o padrão Tipo[tamanho] - mas o compilador aceita apenas String[4][3][3], oque seria Tipo[tamanho][][]



Isso não foge a sintaxe do Java?





import javax.swing.*;



public class Array3 {



public static void main (String arg[]){

//declaração de variáveis

String saida = "";

int k,i,j;



String[][] z[] = new String[4][3][3];



//atribuir valores

for (k=0; k<4; k++){

for (i=0; i<3; i++){

for (j=0; j<3; j++){

z[k][i][j] = "["+k+"]["+i+"]["+j+"]";}}}



for (i=0; i<3; i++){

for (k=0; k<4; k++){

for (j=0; j<3; j++){

saida += z[k][i][j]+",";}

saida += " ";}

saida += "n";}



//saida na tela

JOptionPane.showMessageDialog(null,saida);

System.exit(0);

}

}

Na verdade existem duas formas de declarar Arrays em Java:

Tipo[] variável

ou

Tipo variável[]



no caso você está misturando ambas.

Quando você junta várias, o que na verdade você está fazendo não é realmente uma "array tridimensional", e sim uma array de uma array de um array. Por isso, tem que colocar os tamanhos da esquerda pra direita.

Correto, é exatamente isso que eu estou fazendo, o java reconhece até um array bidimenciomal, e esse eu declaro usando o String[][], agora eu quero que cada elemento de uma nova string (z[]) referencie uma String[][], portanto eu uso o String[][] z[] (estou usando a forma

Tipo[] referência para criar a String[][] e a forma

Tipo referência[], para que cada elemento de z[] referencie um String[][]) mas a dúvida permanece:



No código eu quero criar um array z[4][3][3], portanto declaro

String[][] z[] - Tipo(String[][]) referência[]; e no meu ponto de vista deveria inicializar com - new String[][][4], ou pelo menos

String[3][3][4], para manter o padrão Tipo[tamanho] - mas o compilador aceita apenas String[4][3][3], oque seria Tipo[tamanho][][]

Antes de mais nada gostaria de agradecer ao Bani pela força, mas como não era exatamente a resposta para minha dúvida, fiquei pensando a respeito disso e chequei a uma conclusão intuitiva.

Estou apenas começando a estudar Java e gostaria que alguem me corrigisse se estiver errado ou confirmar se estou certo.



Quando declaro String[][] z[] o Java entende que eu quero um

" array de ´array de array´ ", portanto para z ele aloca memória para referenciar um String[][][], e quando eu utilizo o new para inicializar z eu ja estou trabalhando com uma referência para String[][][], portanto devo utilizar os cochetes nessa ordem.

Ainda não ficou muito claro pra mim, mas acho que é mais ou menos por aí sim.

z[] é a array mais interna, portanto a primeira a ser incializada.

Em seguida vem um String[] de z[], portando a segunda.

E por último o String[][] de z[].