HOWTO · Java

Ottieni la lunghezza di un array 2D in Java

L'articolo introduce i metodi per ottenere la lunghezza di un array 2D in Java

In questa pagina

Per un array Java bidimensionale chiamato arr, arr.length restituisce il numero di righe. In un array rettangolare, arr[0].length restituisce il numero di colonne di ogni riga, purché l’array esterno contenga almeno una riga. Java rappresenta un array bidimensionale come un array i cui elementi sono array di righe distinti: perciò un array irregolare può avere righe di lunghezza diversa.

Come gli array Java bidimensionali organizzano righe e colonne

Una dichiarazione come int[][] values descrive un array esterno di righe int[]. Il length dell’array esterno conta i riferimenti alle righe, non tutti gli interi della griglia. Ogni riga ha il proprio length. Un array rettangolare ha tutte le righe della stessa lunghezza; in un array irregolare, invece, le lunghezze delle righe possono variare.

Il membro length è un campo di ogni array Java, non un metodo. Scrivi values.length senza parentesi. Per esaminare una riga specifica, usa values[rowIndex].length.

Ottenere le dimensioni di un array bidimensionale rettangolare

Usa il length dell’array esterno per ottenere il numero di righe. Se l’array contiene almeno una riga e tutte le righe hanno la stessa dimensione, il length della prima riga indica il numero di colonne. Questo esempio completo stampa entrambe le dimensioni:

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

class Main {
    public static void main(String[] args) {
        int[][] scores = {
            {8, 7, 9},
            {6, 5, 8}
        };

        int rows = scores.length;
        int columns = scores[0].length;
        System.out.println("Rows: " + rows);
        System.out.println("Columns: " + columns);
    }
}

L’output mostra due righe e tre colonne, in accordo con le dimensioni di scores:

Rows: 2
Columns: 3

Ottenere la lunghezza di ogni riga in un array irregolare

Un array irregolare non ha un unico numero di colonne. Seleziona una riga per ottenerne la lunghezza oppure scorri l’array esterno per esaminare tutte le righe. La condizione del ciclo usa rows.length, mentre rows[i].length restituisce la dimensione della riga selezionata:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

class Main {
    public static void main(String[] args) {
        int[][] rows = {
            {4, 2},
            {7, 1, 3},
            {9}
        };

        System.out.println("Rows: " + rows.length);
        for (int i = 0; i < rows.length; i++) {
            System.out.println("Row " + i + " length: " + rows[i].length);
        }
    }
}

L’output indica la lunghezza di ogni riga; se ti serve una sola riga, usa un’espressione come rows[1].length:

Rows: 3
Row 0 length: 2
Row 1 length: 3
Row 2 length: 1

Gestire in sicurezza righe vuote o null

Prima di leggere arr[0].length, verifica che l’array esterno contenga una riga. Un array creato con new int[0][] non ha una prima riga: controlla quindi arr.length > 0 prima di usare l’indice 0. Per accedere a una riga richiesta, verifica innanzitutto rowIndex >= 0 && rowIndex < arr.length; gli indici degli array Java partono da zero e l’ultimo indice valido è inferiore di uno a arr.length. Poi controlla che arr[rowIndex] non sia null prima di leggerne la lunghezza, perché dereferenziare una riga nulla causa una NullPointerException. Una riga esistente ma senza elementi è diversa: il suo valore length è 0 e si può leggere senza problemi.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

class Main {
    public static void main(String[] args) {
        int[][] arr = { {1, 2}, null, {} };

        System.out.println("Rows: " + arr.length);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == null) {
                System.out.println("Row " + i + " is null");
            } else {
                System.out.println("Row " + i + " length: " + arr[i].length);
            }
        }
    }
}

Questo esempio produce:

Rows: 3
Row 0 length: 2
Row 1 is null
Row 2 length: 0

La riga nulla viene individuata senza dereferenziarla, mentre la riga allocata ma priva di elementi ha lunghezza zero. Se anche l’array esterno potrebbe essere null, controlla arr != null prima di leggere arr.length.