"¡Hola, mi estudiante más inteligente!"

"¡Hola, Rishi!"

"¿Estás anhelando una nueva discusión sobre arreglos? Bueno, ¡hoy tenemos uno para ti! Hoy te hablaré sobre arreglos irregulares y multidimensionales".

"Suena sanguinario y aterrador".

"No se preocupe, un programador real siempre puede manejar una matriz, incluso cuando enseña los dientes. Bromas aparte, la irregularidad de una matriz refleja la capacidad no solo de intercambiar las filas de una matriz bidimensional, sino también de construir una matriz sin embargo tiene que ser.

"Digamos que desea que la primera fila de una matriz bidimensional tenga una longitud de 10 y la segunda de 50".

"¿De verdad puedes hacer eso?"

"¡Absolutamente! Primero, creamos un 'contenedor de contenedores': esta es la primera matriz, que almacenará referencias a matrices de filas. Así es como se hace:

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

"Simplemente omite la segunda dimensión , y la máquina Java crea un contenedor de contenedores. Esto es lo que estará en la memoria después de ejecutar este código:

"Y, bueno, ya sabes cómo crear arreglos unidimensionales 🙂

Así es como se verá el código resultante:

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

La fila cero es una matriz de 10elementos
La primera fila es una matriz de 50elementos

"Acabamos de crear una matriz denominada 'irregular' . Sus bordes son ásperos e irregulares.

"Y si ahora queremos mostrar todos los elementos de esta matriz en la pantalla, entonces la lengthmatriz de la matriz será útil: después de todo, las longitudes de las filas de la matriz son diferentes.

"Por cierto, ¿puede decirme cómo encontrar la longitud de un 'contenedor de contenedores' en nuestro ejemplo? También es un objeto de matriz, lo que significa que tiene una longitud".

"Probablemente matrix.length?"

"¡Muy bien! Y para las matrices que forman las filas, usaríamos matrix[0].lengthpara la fila cero".

"Y para el primero, ¿eso significa que usaríamos matrix[1].length?"

"Muy bien. En el primer caso, la ejecución del comando arrojará 10, y en el segundo caso, el resultado será 50.

Trabajando con una matriz bidimensional

"Ahora intentemos mostrar una matriz 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();
}
Crear una matriz
Rellenar la matriz con valores


Bucle externo que itera sobre las filas de la matriz.
Bucle interno que itera sobre las celdas de una sola fila.

"Como puede ver, necesitamos dos bucles anidados. Al primero lo llamamos externo y al segundo, interno .

"En el bucle externo (la ivariable), recorremos secuencialmente todas las filas (matrices) que componen nuestra matriz bidimensional. Cada valor de icorresponde a una fila con ese índice.

"En el ciclo interno (la jvariable), iteramos sobre todas las celdas de las filas. Gracias al ciclo interno, se mostrará en la pantalla una fila que consta de los valores de una matriz unidimensional.

"Esto es lo que se mostrará:

Se procesa una línea de la matriz. 1 2 3 4 5 6
Se procesan dos líneas de la matriz. 1 2 3 4 5 6
1 2 3
Se procesan tres líneas de la matriz. 1 2 3 4 5 6
1 2 3
1

Matrices multidimensionales

"¡Amigo! ¿Adivinaste que si hay arreglos bidimensionales, entonces también puede haber arreglos tridimensionales?

"Estaba pensando en eso, pero me dio vergüenza preguntar.

"Sí, puede crear una matriz tridimensional y, en general, una matriz de cualquier dimensión. Estas matrices se denominan 'multidimensionales'. Solo por diversión, creemos una matriz multidimensional que tenga 4 dimensiones.

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

"¡Eso no parece muy difícil!"

"¡Aún no has intentado crear uno manualmente! Toma, deléitate con esto:

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

"¡Y eso es solo crear una matriz! Entonces también necesitas trabajar con ella de alguna manera".

"Retiro lo que dije. No es tan fácil trabajar con ellos. Pero es posible".

"Dado que es posible, aquí hay una tarea adicional. Escriba un código que muestre todos los valores en una matriz tridimensional. Usted sabe lo suficiente para hacer esto. Lo principal es ser paciente y atento. O tal vez ser ingenioso (hay un pequeño secreto de conocimientos que te ayudarán a resolver esta tarea en una sola línea). Pero no importa cómo lo resuelvas, resuélvelo".

"Gracias, Rishi. Lo intentaré".