Saltar al contenido principal

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
Valores 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();
}
Recorrido con for-each

El 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
}
}