HOWTO · Java

Como obter o comprimento de uma array 2D em Java

O artigo introduz métodos para obter o comprimento de uma array 2D em Java

Nesta página

Para um array 2D de Java chamado arr, arr.length fornece o número de linhas. Em um array retangular, arr[0].length fornece o número de colunas de cada linha, desde que o array externo tenha uma primeira linha. Java representa um array 2D como um array cujos elementos são arrays de linha separados; por isso, um array irregular pode ter linhas com comprimentos diferentes.

Como arrays 2D de Java armazenam linhas e colunas

Uma declaração como int[][] values descreve um array externo de linhas int[]. O length do array externo conta as referências às linhas; ele não conta todos os números inteiros da matriz. Cada linha tem seu próprio length. Um array retangular é aquele em que todas as linhas têm o mesmo comprimento. Em um array irregular, os comprimentos das linhas podem variar.

length é um campo de todo array Java, não um método. Escreva values.length, sem parênteses. Para consultar uma linha específica, use values[rowIndex].length.

Obter as dimensões de um array 2D retangular

Use o length do array externo para obter o número de linhas. Se o array tiver pelo menos uma linha e todas tiverem o mesmo tamanho, o length da primeira linha será o número de colunas. Este exemplo completo imprime as duas dimensões:

Execute este exemplo:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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);
    }
}

A saída mostra duas linhas e três colunas, correspondentes às dimensões de scores. Os rótulos exibidos no exemplo permanecem em inglês:

Rows: 2
Columns: 3

Obter o comprimento de cada linha em um array irregular

Um array irregular não tem um único número de colunas. Selecione uma linha para obter seu comprimento ou percorra o array externo para consultar todas as linhas. A condição do loop usa rows.length, enquanto rows[i].length informa o tamanho da linha selecionada:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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);
        }
    }
}

A saída informa o comprimento de cada linha. Se você precisar consultar apenas uma delas, use uma expressão como rows[1].length. Os rótulos exibidos no exemplo permanecem em inglês:

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

Como lidar com linhas vazias ou nulas com segurança

Antes de ler arr[0].length, verifique se o array externo contém uma linha. Um array criado como new int[0][] não tem primeira linha; por isso, confira arr.length > 0 antes de usar o índice 0. Para acessar uma linha específica, primeiro verifique rowIndex >= 0 && rowIndex < arr.length; os índices de arrays em Java começam em zero, e o último índice válido é um a menos que arr.length. Em seguida, confirme que arr[rowIndex] não é null antes de consultar seu comprimento, pois acessar uma linha nula causa uma NullPointerException. Uma linha existente sem elementos é diferente: seu comprimento é 0 e pode ser consultado com segurança.

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

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);
            }
        }
    }
}

Este exemplo produz a saída a seguir. Os rótulos exibidos permanecem em inglês:

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

A linha nula é identificada sem ser acessada, enquanto a linha alocada sem elementos tem comprimento zero. Se o próprio array externo também puder ser null, verifique arr != null antes de ler arr.length.