CodeGym /Cursos Java /Módulo 1. Java Syntax /matrices irregulares en java

matrices irregulares en java

Módulo 1. Java Syntax
Nivel 8 , Lección 1
Disponible

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.


Comentarios (8)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
tokenizer Nivel 16
15 noviembre 2024
el ejercicio dos no se trata de mostrar los corchetes en funcion de los numeros introducidos, si no de obtener arrays de esa medida
tokenizer Nivel 16
15 noviembre 2024

        for(int i = 0;i < 10;i++){
            for(int j = 1;j < i + 2;j++){
                result[i] = new int[j];
            }
        }

        for(int x = 0; x < result.length;x++) {
            for(int y = 0;y < x + 1;y++){
                result [x][y] = x + y; // 0 0
                System.out.print(" " + result[x][y]);
            }
            System.out.println();
        }
esta solución me sirvió para el primero
Selusinho Nivel 13, Sevilla, Spain
3 octubre 2024
deberían de ampliar muuucho mas esta parte de arrays, porque se presenta de manera muy explícita y breve. Algo que es habitualmente usado y básico en cualquier aplicación, por muy simple que sea.... Siento que avanzo pero a ciegas y no termino de comprender la materia. Muy mejorable esta sección
Cesar Nivel 11
14 septiembre 2024
se puede realizar de maneras diferentes
Erick Alvarez Abarca Nivel 11, Alajuela, Costa Rica Expert
16 junio 2024
Deberian tener un video que explique cada ejercicio. el porque solo acepta una manera de escribir el codigo si aunque se escriba uno similar no lo acepta aun si funciona como deberia. Cada ves me gusta menos esta manera de usar esta plataforma para practicar.
Elpidio Díaz Rodríguez Nivel 14 Expert
22 abril 2024
En el array triangular obtuve el mismo resultado con un algoritmo parecido y no me lo quiso aceptar
Anonymous #11544602 Nivel 23, Mariquita, Colombia
25 julio 2024
Si, se puede llegar a una respuesta por diferentes caminos
ALRO GM Nivel 15, Spain
11 septiembre 2024
Qué algoritmo usaste? no solo importa el resultado, hacen test para ver que el código no se rompe por otro lado o corroborar que no hayas hecho "trampas" para obtener el resultado.