Daniele91 ha scritto:
Qualcuno potrebbe darmi delucidazioni in merito ? E in generale come si fa per scansionare righe tenendo ferme le colonne e viceversa??
Se hai un array bidimensionale, avrai 2 indici da gestire. Che poi l'array sia "quadrato" o "rettangolare" poco/nulla cambia in generale (in Java è anche possibile avere array "jagged" ovvero
frastagliati,
irregolari).
Tieni però sempre presente che l'array bidimensionale è fisicamente strutturato per righe. In un int[][] c'è un array principale che contiene N reference ad array int[] ciascuno con i dati di una riga.
Quindi scansionare i valori per ciascuna riga è intuitivo e banale:
int[][] matrice = ........;
for (int r = 0; r < matrice.length; r++) {
for (int c = 0; c < matrice[r].length; c++) {
// usa matrice[r][c]
}
}
perché segue la strutturazione fisica dell'array. Questo funziona sia per array quadrati, rettangolari o jagged. E tecnicamente i for non ciclano (senza dare alcun problema) se addirittura il numero di righe è 0.
Mentre l'inverso, ovvero scansionare i valori per ciascuna colonna è leggermente diverso. Innanzitutto devi dedurre il numero delle colonne e banalmente (se matrice quadrata/rettangolare) lo puoi presumere dal numero di colonne nella prima riga.
for (int c = 0; c < matrice[0].length; c++) {
for (int r = 0; r < matrice.length; r++) {
// usa matrice[r][c]
}
}
Qui però almeno una riga ci deve essere! E se l'array fosse jagged, non sarebbe molto appropriata la scansione come l'ho scritta.
Ti è più chiaro ora?