1. Matrices irregulares

Como programador de Java, no solo puede intercambiar las filas de una matriz bidimensional, sino también construir una matriz como desee.

Digamos que desea que la primera fila de una matriz bidimensional tenga una longitud de 10, y desea que la longitud de la segunda fila sea 50. ¿Podemos hacer eso? Si podemos.

Primero, necesitamos crear 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 quedará en la memoria después de ejecutar este código:

Matrices irregulares en Java

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 llamada " matriz irregular ".

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

Por cierto, ¿cómo encuentras la longitud de un 'contenedor de contenedores' en nuestro ejemplo? También es un objeto de matriz, lo que significa que tiene una longitud. La respuesta correcta es matrix.length.

¿Qué hay de las matrices que componen nuestras filas?matrix[0].length



2. Trabajar con una matriz bidimensional

Suponga que desea mostrar una matriz bidimensional. ¿Cómo haces eso?

Nuestro código se verá así:

int[][] matrix = new int[3][];
matrix[0] = new int[]{1, 2, 3, 4, 5, 6};
matrix[1] = new int[]{1, 2, 3};
matrix[2] = new int[]{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.

Necesitas dos bucles anidados. A la primera la llamamos exterior y a la segunda interior .

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 bucle 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 fila de la matriz
1 2 3 4 5 6
Se procesan dos filas de la matriz.
1 2 3 4 5 6
1 2 3
Se procesan tres filas de la matriz.
1 2 3 4 5 6
1 2 3
1


3. Arreglos multidimensionales

Otro dato interesante sobre las matrices, uno que probablemente ya hayas adivinado. Si puedes hacer una matriz bidimensional, ¿puedes hacer una matriz tridimensional?

Sí, puede crear 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];

Este código es demasiado simple, ¿no?

¿Qué pasa si lo creas manualmente?

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 la matriz! Entonces también necesitas trabajar con eso de alguna manera.

Tarea adicional: escribir código que muestre todos los valores en una matriz tridimensional.