Concepto de matrices

Las matrices son otro tipo específico de arrays, en los que se utiliza más de un índice para hacer referencia a sus elementos. Se trata, por tanto, de arrays multidimensionales.

Declaración, creación e inicialización

La declaración de una matriz se realiza utilizando el siguiente formato:

tipoDato[][] nombreArray;

Otro formato posible:

tipoDato nombreArray[][];

Donde tipoDatos es el tipo de dato de los elementos que se van a almacenar en la matriz, y nombreArray es el nombre común con el que se va a hacer referencia a dichos elementos.

Se utilizarán tantos pares de corchetes como dimensiones tenga la matriz.

Ejemplo:

int[][] edades;

Para usar un array es necesario crearlo previamente, además de haber sido declarado. En el caso de las matrices se debe utilizar el siguiente formato para crearlos:

nombreArray = new tipoDato[tamaño1][tamaño2];

Los tamaños indican el número de elementos que podrá almacenar la matriz por cada dimensión.

También se pueden crear al declararlo. De esta manera, en una misma línea de código se hace la declaración y la creación de la matriz:

tipoDato[][] nombreArray = new tipoDato[tamaño1][tamaño2];

Ejemplo:

int[][] edades = new int[5][10];

En este ejemplo se crea una matriz que se puede representar gráficamente como una matriz de 5 filas y 10 columnas, empezando a numerarse desde el valor 0. En cada una de las celdas se podrá almacenar, en este ejemplo, un valor entero.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

También es posible inicializar los elementos del array a la vez que se crea, utilizando el siguiente formato:

tipoDato[][] nombreArray = { {elem1_1, elem1_2, ..., elem1_N}, 
{elem2_1, elem2_2, ..., elem2_N},
{elem3_1, elem3_2, ..., elem3_N} };

Ejemplo:

int[][] edades = { {22,35,23,34,26,40,39}, {23,42,45,12,27,54,36} };

En este ejemplo se ha declarado, creado e inicializado la matriz con un tamaño de 2x7 elementos.

Hay que observar, que al crear una matriz siendo inicializada, no se usa la palabra new.

Consulta de los valores de una matriz

Para conocer el valor que se encuentra almacenado en una determinada posición de la matriz se debe utilizar el siguiente formato:

nombreArray[posición1][posición2]

Es decir, se debe indicar el nombre de la matriz, seguido de la posición en la que se encuentra el elemento deseado indicada entre corchetes.

Hay que tener muy en cuenta que el primer elemento se encuentra en la primera posición 0, y el último en la posición N-1 para un array con N elementos. 

Ejemplo en el que se muestra el nombre completo de una persona elegida de una matriz que contiene los datos de 4 personas, separando en filas el nombre y cada apellido:

String[][] personas = {{"MIGUEL", "FUENTE", "GALLEGO"},
                       {"PATRICIA", "CABALLERO", "MORENO"},
                       {"ANTONIO", "ALVAREZ", "PARMO"},
                       {"PABLO", "MONTERO", "DIEZ"}};
//Mostrar el nombre completo de la segunda persona      
System.out.println(personas[1][0]+" "+personas[1][1]+" "+personas[1][2]);
//Se muestra: PATRICIA CABALLERO MORENO

Asignación de valores

Para asignar un valor a un determinado elemento de la matriz, se debe usar el siguiente formato:

nombreArray[posición1][posición2] = valor;

Obviamente, el tipo de dato del valor que se va a asignar, debe ser del mismo tipo que la matriz. Ese valor puede ser un valor literal, una variable, o el resultado de una expresión. 

Ejemplo de modificación de los datos de una persona de la matriz anterior:

String[][] personas = {{"MIGUEL", "FUENTE", "GALLEGO"},
                       {"PATRICIA", "CABALLERO", "MORENO"},
                       {"ANTONIO", "ALVAREZ", "PARMO"},
                       {"PABLO", "MONTERO", "DIEZ"}};
//Cambiar los datos de la tercera persona
personas[2][0] = "MIGUEL";
personas[2][1] = "ARAGUAS";
personas[2][2] = "FIDALGO";

Recorrer el contenido de una matriz

Es muy frecuente tener la necesidad de recorrer el contenido de una matriz, obteniendo cada uno de sus elementos. Para ello, se deben utilizar tantos bucles como dimensiones tenga la matriz, para que vaya obteniendo los índices de cada elemento.

Es posible obtener el tamaño de una matriz a través del atributo length siguiendo el siguiente formato:

nombreArray.length

Esta sentencia nos devuelve la cantidad de elementos asociados al primer índice, lo que podríamos interpretar como el número de filas que posee.

Para obtener el tamaño de otra dimensión se deberá indicar uno de los elementos de una dimensión menos. Por ejemplo, para obtener el número de columnas que posee la fila 0:

nombreArray[0].length

Conviene destacar que no se utilizan paréntesis detrás de length, a diferencia de la forma de obtener la longitud de un String.

Por ejemplo, para mostrar todos los datos de las personas almacenadas en la matriz anterior:

String[][] personas = {{"MIGUEL", "FUENTE", "GALLEGO"},
                               {"PATRICIA", "CABALLERO", "MORENO"},
                               {"ANTONIO", "ALVAREZ", "PARMO"},
                               {"PABLO", "MONTERO", "DIEZ"}};
for(int fila=0; fila<personas.length; fila++) {
    for(int columna=0; columna<3; columna++) {
        System.out.print(personas[fila][columna]+" ");
    }
    //Salto de línea al terminar con los datos de una persona
    System.out.println();
}

Otra forma de recorrer completamente una matriz es utilizando el siguiente formato del bucle for:

for(tipoDato nombreDim1[]:nombreArray)
for(tipoDato nombreElemento:nombreDim1)

Así se obtiene sucesivamente cada elemento de la matriz nombreArray asignándole el nombre indicado como nombreElemento. 

Ejemplo que obtiene los mismos resultados que el anterior:

String[][] personas = {{"MIGUEL", "FUENTE", "GALLEGO"},
                       {"PATRICIA", "CABALLERO", "MORENO"},
                       {"ANTONIO", "ALVAREZ", "PARMO"},
                       {"PABLO", "MONTERO", "DIEZ"}};
for(String unaPersona[]:personas) {
    for(String dato:unaPersona) {
        System.out.print(dato+" ");
    }
    System.out.println();
}