Gli array bidimensionali o matrici sono array di array.
Questa idea può essere estesa a una matrice di dimensione qualsiasi, creando per esempio array di array di array.
Si può dichiarare un array di array e crearlo con
tipo[][] nomeArray = new tipo[numRighe][numColonne]
int [][] matrice = new int[10][8];
matrice è un array di 10 oggetti ciascuno dei quali è un array di 8 numeri interi.
Si possono inizializzare i valori di un array di array al momento della dichiarazione innestando gli inizializzatori.
int[][] tavolaPitagorica = {{1,2,3,4,5,6,7,8,910}, {2,4,6,8,10,12,14,16,18,20}, ..., {10,20,30,40,50,60,70,80,90,100}};
Si può fare riferimento a un elemento di un array di array con
nomeArray[indiceRiga][indiceColonna]
Se gli indici non sono validi viene lanciata l’eccezione IndexOutOfBoundsException
.
matrice[3][4] = 12;
Il numero di righe di un array di array è dato da nomeArray.length
.
Se tutte le righe hanno lo stesso numero di elementi il numero di colonne è dato dal numero di elementi di una qualsiasi delle righe, per esempio nomeArray[0].length
.
int righe = matrice.length; int colonne =matrice[0].length;
righe
vale 10 e colonne
vale 8.
Classe per la gestione della tavola pitagorica: il costruttore crea la tabella, il metodo stampa()
stampa la tabella, il metodo prodotto()
restituisce il prodotto di due numeri ricavandolo dalla tabella.
Anche gli array multidimensionali sono memorizzati in locazioni contigue di memoria, una riga di seguito all’altra (l’indice della dimensione più a destra viene incrementato per primo).
L’elemento di posto i
, j
di una matrice n x m
occupa la posizione (i-1)m + j
(i-1
sono le righe che precedono la riga i
, ognuna di m
elementi; sull’ultima riga gli elementi precedenti sono j
).
Si possono anche dichiarare array bidimensionali nei quali la lunghezza delle righe varia.
b[0][0] b[1][0] b[1][1] b[2][0] b[2][1] b[2][2] b[3][0] b[3][1] b[3][2] b[3][3] b[4][0] b[4][1] b[4][2] b[4][3] b[4][4]
Bisogna assegnare uno spazio adatto a contenere 5 righe e lasciare vuoto il secondo indice; poi bisogna creare ogni riga separatamente, con la dimensione appropriata.
int[][] b = new int[5][] for (int i=0; i<b.length; i++) { b[i] = new int[i+1]; }