Arrays de 2 dimensiones
Un array bidimensional (también llamado matriz) es un array de arrays, que se puede visualizar como una tabla con filas y columnas.
Cada elemento se identifica mediante dos índices:
- Índice de la fila.
- Índice de la columna.
Declaración
// Sintaxis general
tipoDato[][] nombreArray;
// Ejemplos
int[][] matriz;
String[][] tabla;
double[][] valores;
Creación (inicialización)
Con new
La creación con new establece un tamaño fijo del array.
int[][] matriz = new int[3][4]; // 3 filas, 4 columnas
// Los enteros se inicializan a 0 por defecto
Cuando se crea una array con new, todas las posiciones toman el valor por defecto del tipo de dato del array.
Con valores literales
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Declaración y asignación por separado
int[][] matriz;
matriz = new int[2][3];
Acceso a elementos
El acceso se realiza mediante dos índices: array[fila][columna]. Los índices comienzan en 0.
int[][] matriz = {
{10, 20, 30},
{40, 50, 60}
};
System.out.println(matriz[0][0]); // 10
System.out.println(matriz[0][2]); // 30
System.out.println(matriz[1][1]); // 50
// Modificar un valor
matriz[1][2] = 99;
System.out.println(matriz[1][2]); // 99
Recorrer un array bidimensional
La forma más habitual es usar dos bucles for anidados: el externo itera sobre las filas y el interno sobre las columnas.
Con for clásico
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matriz.length; i++) { // filas
for (int j = 0; j < matriz[i].length; j++) { // columnas
System.out.print(matriz[i][j] + "\t");
}
System.out.println(); // salto de línea al final de cada fila
}
Salida:
1 2 3
4 5 6
7 8 9
Con for-each
for (int[] fila : matriz) {
for (int valor : fila) {
System.out.print(valor + "\t");
}
System.out.println();
}
for-eachEl for-each es más limpio pero no permite modificar los valores del array directamente.
Tamaño
Teniendo en cuenta que una matriz es un array de arrays, podemos obtener el tamaño de un array con length. Si aplicamos la propiedad sobre la propia variable obtendremos el tamaño de filas y, si lo aplicamos sobre un array de una fila, obtendremos el tamaño de las columnas.
int[][] matriz = new int[3][4];
int numFilas = matriz.length; // 3
int numColumnas = matriz[0].length; // 4
Arrays irregulares (jagged arrays)
En Java es posible que cada fila tenga una longitud diferente, ya que cada fila es en realidad un array independiente:
int[][] irregular = new int[3][];
irregular[0] = new int[2]; // fila 0 tiene 2 columnas
irregular[1] = new int[4]; // fila 1 tiene 4 columnas
irregular[2] = new int[1]; // fila 2 tiene 1 columna
Ejemplo completo
public class SumaMatriz {
public static void main(String[] args) {
int[][] matriz = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int suma = 0;
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz[i].length; j++) {
suma += matriz[i][j];
}
}
System.out.println("Suma total: " + suma); // 45
}
}