"Olá, meu aluno mais inteligente!"

"Olá, Rishi!"

"Você está ansioso por uma nova discussão sobre arrays? Bem, hoje temos uma para você! Hoje vou falar sobre arrays irregulares e multidimensionais."

"Parece sanguinário e assustador."

"Não se preocupe, um programador de verdade sempre pode lidar com um array, mesmo quando ele mostra os dentes. Brincadeiras à parte, a irregularidade de um array reflete a capacidade não apenas de trocar as linhas de um array bidimensional, mas também de construir um array no entanto, precisa ser.

"Digamos que você queira que a primeira linha de uma matriz bidimensional tenha um comprimento de 10 e a segunda de 50."

"Você realmente pode fazer isso?"

"Com certeza! Primeiro, criamos um 'contêiner de contêineres' — este é o primeiro array, que armazenará referências a arrays de linhas. É assim que é feito:

int[][] name = new int[height][];

"Você simplesmente omite a segunda dimensão e a máquina Java cria um contêiner de contêineres. Isso é o que ficará na memória após a execução deste código:

"E, bem, você já sabe como criar arrays unidimensionais 🙂

É assim que o código resultante ficará:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Array bidimensional

A linha zero é um array de 10elementos
A primeira linha é um array de 50elementos

"Acabamos de criar um chamado array "irregular" . Suas bordas são ásperas e irregulares.

"E se agora quisermos exibir todos os elementos desse array na tela, então o array do array lengthserá útil: afinal, os comprimentos das linhas do array são diferentes.

"A propósito, você pode me dizer como encontrar o comprimento de um 'contêiner de contêineres' em nosso exemplo? Também é um objeto de matriz, o que significa que tem um comprimento."

"Provavelmente matrix.length?"

"Certo! E para os arrays que formam as linhas, usaríamos matrix[0].lengthpara a linha zero."

"E para o primeiro, isso significa que usaríamos matrix[1].length?"

"Exatamente. No primeiro caso, a execução do comando renderá 10 e, no segundo caso, o resultado será 50.

Trabalhando com um array bidimensional

"Agora vamos tentar exibir um array bidimensional:

int[][] matrix = new int[3][];
matrix[0] = {1, 2, 3, 4, 5, 6};
matrix[1] = {1, 2, 3};
matrix[2] = {1};
for (int i = 0; i < matrix.length; i++)
{
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
Criar uma matriz
Preencher a matriz com valores


Loop externo que itera sobre as linhas da matriz.
Loop interno que itera sobre as células de uma única linha.

"Como você pode ver, precisamos de dois loops aninhados. O primeiro chamamos de externo e o segundo - interno .

"No loop externo (a ivariável), percorremos sequencialmente todas as linhas (arrays) que compõem nosso array bidimensional. Cada valor de icorresponde a uma linha com esse índice.

"No loop interno (a jvariável), iteramos sobre todas as células nas linhas. Graças ao loop interno, uma linha, que consiste nos valores de uma matriz unidimensional, será exibida na tela.

"Isto é o que será exibido:

Uma linha do array é processada 1 2 3 4 5 6
Duas linhas do array são processadas 1 2 3 4 5 6
1 2 3
Três linhas do array são processadas 1 2 3 4 5 6
1 2 3
1

Matrizes multidimensionais

"Amigo! Você adivinhou que, se existem arrays bidimensionais, também podem existir tridimensionais?

"Eu estava pensando sobre isso, mas fiquei com vergonha de perguntar.

"Sim, você pode criar uma matriz tridimensional e, em geral, uma matriz de qualquer dimensão. Essas matrizes são chamadas de 'multidimensionais'. Apenas por diversão, vamos criar uma matriz multidimensional com 4 dimensões.

 int[][][][] matrix = new int[2][3][4][5];

"Isso não parece muito difícil!"

"Você ainda não tentou criar um manualmente! Aqui, delicie-se com isso:

int[][][][] matrix;
matrix = new int[2][][][];                   // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];                // Create a 3-element array of references to references
  for (j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];             // Create a 4-element array of references
    for (k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];          // Create 5-element arrays of integers
  }
}

"E isso é apenas criar um array! Então você também precisa trabalhar com ele de alguma forma."

"Retiro o que disse. Não é tão fácil trabalhar com eles. Mas é possível."

"Como é possível, aqui está uma tarefa bônus. Escreva um código que exiba todos os valores em uma matriz tridimensional. Você sabe o suficiente para fazer isso. O principal é ser paciente e atencioso. Ou talvez ser engenhoso (há um segredo de conhecimento que o ajudará a resolver esta tarefa em uma única linha). Mas não importa como você resolva, resolva."

"Obrigado, Rishi. Vou tentar."