INTRODUCCIÓN
Anteriormente ya hemos explicado que son y como funcionan los arreglos; sin embargo, los arreglos como hemos mencionado son matrices y hasta el momento solo hemos contemplado matrices o arreglos de una sola dimensión, entonces, ¿Qué ocurre con los arreglos de dos dimensiones, o en adelante?, en Java no existen los arreglos bidimensionales por definición, sino que se trata de arreglos dentro de arreglos, siendo que un arreglo de 2 dimensiones puede ser representado como una tabla (aunque no es una tabla) y un arreglo de 3 dimensiones como un cubo y así sucesivamente, siendo que los arreglos de mayores dimensiones representan un verdadero problema al menos en su representación. Un arreglo bidimensional se puede representar de la siguiente forma:
DECLARACIÓN
Su declaración de forma implícita sigue la siguiente sintaxis:
int [][] matrix1=new int [4][5];
Quizá una forma sencilla de entenderlo sería que el arreglo principal tendrá 4 sub-arreglos y que cada sub-arreglo tendrá 5 elementos. ¿Podemos declarar un arreglo bidimensional de forma explícita?, sí, pero realmente resultaría muy engorroso, sino observa:
matrix1[0][0]=15; matrix1[0][1]=21; matrix1[0][2]=18; matrix1[0][3]=9; matrix1[0][4]=15; matrix1[1][0]=10; matrix1[1][1]=52; matrix1[1][2]=17; matrix1[1][3]=19; matrix1[1][4]=7; matrix1[2][0]=19; matrix1[2][1]=2; matrix1[2][2]=13; matrix1[2][3]=17; matrix1[2][4]=7; matrix1[3][0]=92; matrix1[3][1]=13; matrix1[3][2]=13; matrix1[3][3]=32; matrix1[3][4]=41;
También podemos hacerlo de forma explícita de la siguiente forma:
int [][] matrix={{15,21,18,9,15}, {10,52,17,19,7}, {19,2,13,17,7}, {92,13,13,32,41} }
Pero esto resulta quizá sencillo por la cantidad de elementos que alberga el arreglo, imagina ahora si fuera un arreglo de 100×100, definitivamente la forma implícita resulta una mejor opción
RECORRIDO
Obtener una posición específica del arreglo es indicando la posición exacta que estamos buscando:
System.out.println(matrix1[2][0])
Obviamente que debe de existir un valor ya asignado en dicha posición. ¿Cómo podemos recorrer un arreglo bidimensional?, el recorrido se realiza a través de un bucle for anidado, para ello podemos emplear tanto el for convencional como el foreach:
Por ejemplo asignemos los valores a los elementos
for (int i = 0; i < matrix1.length; i++) { for(int j =0; j < matrix1[i].length; j++){ matrix1[i][j]=j+i; } }
Observemos la estructura del bucle for anidado, tanto i como j representan los índices del arreglo y sub-arreglos respectivamente, la estructura se resuelve primero iterando sobre el sub-arreglo manteniendo fijo el valor de i, cuando se ha recorrido todo el sub-arreglo (es decir j) se pasa al siguiente valor de i. Ahora recorramos el arreglo bidimensional pero esta vez haciendo uso del bucle foreach:
for (int[] submatriz : matrix1) { for(int elemento : submatriz){ System.out.println(elemento); } }
Podemos observar que el recorrido es mucho más simplificado solo siempre recordar que deben ser del mismo tipo al elemento que ha de recorrerse.