Array bidimensionali

Un array bidimensionale si può definire e allocare con la sintassi:

tipoElementi[][] nomeMatrice = new tipoElementi[dim1][dim2];

ad esempio:

double[][] p = new double[10][20];

Possiamo immaginare che la prima dimensione indichi il numero di righe e la seconda il numero di colonne. Il valore di p.length sarà la lunghezza della prima dimensione (numero di righe), mentre p[i].length, dove i è un qualsiasi valore lecito per il primo indice, indica la misura della seconda dimensione (numero di colonne)

Nell'esempio riportato sopra, p.length sarà pari a 10, mentre p[0].length sarà pari a 20.

Gli elementi dell'array bidimensionale saranno individuati dalla sintassi
..... p[espr1][espr2] ... in cui espr1 ed espr2 sono due espressioni intere il cui valore, durante l'esecuzione del programma, dovrà necessariamente essere compreso nei rispettivi intervalli di validità, pena il blocco del programma con la nota ArrayIndexOutOfBoundsException.

Quindi, il primo elemento della prima riga sarà p[0][0], e l'ultimo elemento dell'ultima riga sarà p[9][19].

Il seguente frammento di codice alloca un array bidimensionale di double con 4 righe e 7 colonne, e lo inizializza con valori casuali nell'intervallo [0,1).

    double[][] mat = new double[4][7];
    for(int i=0; i<mat.length; i++)
    {
        for(int j=0; j<mat[i].length; j++)
        {
            mat[i][j] = Math.random();
        }
    }

Inizializzazione di un array bidimensionale

Analogamente a quanto visto per gli array monodimensionali, un array bidimensionale può essere inizializzato contestualmente alla sua definizione come segue:

    // in questo esempio l'array mat avrà 3 righe e 4 colonne
    
    int[][] mat = {{5, 3, 6, 12}, {1, 3, 3, 2}, {0, 0, 3, 14}};

Primi esercizi su arrays bidimensionali

Dato un array bidimensionale di int (preferibilmente inizializzato nel codice), risolvere i problemi seguenti. Dove specificato, si assume che la matrice sia quadrata.

  1. stampare la matrice in forma di tabella (questo punto è risolto in StampaMatrice.java)
  2. stampare la somma di tutti gli elementi della matrice
  3. trovare il massimo elemento della matrice
  4. trovare il massimo elemento della diagonale principale (assumendo che la matrice sia quadrata)
  5. separatamente per ciascuna riga, stampare la somma degli elementi della riga
  6. separatamente per ciascuna colonna, stampare la somma degli elementi della colonna
  7. stampare la somma di tutti gli elementi sulla diagonale principale (assumendo che la matrice sia quadrata)
  8. stampare la somma di tutti gli elementi sulla diagonale secondaria (assumendo che la matrice sia quadrata)
  9. stampare la posizione (riga e colonna) dell'elemento massimo
  10. verificare se la matrice (che si assume quadrata) è simmetrica
  11. contare il numero di elementi pari a 0 nel triangolo inferiore (elementi al di sotto della diagonale principale), assumendo che la matrice sia quadrata

Soluzione: MatriceVarie.java