Questão nº 22

Questão de Tecnologia da Informação · FCC TRT14 2022 (nº 22)

FCC2022Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Cver comentário ↓

Considere o código Java abaixo.

public class Prova {
    public static void main(String[] args) {
        int[][] dados = new int[5][];
        for (int i = 0; i < 5; i++) {
            dados[i] = new int[5];
            for (int j = 0; j < 5; j++) {
                dados[i][j] = i + j;
                System.out.println(dados[i][j]);
            }
        }
    }
}

Sobre o código

Resposta comentada

Gabarito Alternativa C

Em Java, um array de arrays (também conhecido como array denteado ou jagged array) permite que as "linhas" de um array bidimensional tenham tamanhos diferentes. Para isso, primeiro você declara o array principal e seu número de "linhas", e depois inicializa cada "linha" individualmente como um novo array.

  • (A) Incorreta: A declaração int[][] dados = new int[5][]; é perfeitamente válida em Java. Ela cria um array de 5 posições, onde cada posição pode armazenar uma referência para um array de inteiros. Inicialmente, todas essas 5 referências são null, mas não causa NullPointerException na declaração.
  • (B) Incorreta: Se o comando dados[i] = new int[5]; fosse removido, o programa tentaria acessar dados[i][j] quando dados[i] ainda seria null (pois não teria sido inicializado com um array real), o que resultaria em uma NullPointerException no comando dados[i][j] = i + j;.
  • (C) Correta: dados.length retorna o número de elementos no array dados, que neste caso é 5 (o tamanho da primeira dimensão). Portanto, i < 5 e i < dados.length são equivalentes e podem ser usados de forma intercambiável sem alterar a lógica de execução. Usar dados.length é uma boa prática, pois torna o código mais flexível se o tamanho do array for alterado.
  • (D) Incorreta: O comando int[][] dados = new int[5][]; é válido e cria um array denteado. O código funciona corretamente com essa declaração, pois as sub-arrays são inicializadas no loop. Não é obrigatório substituí-lo por int[][] dados = new int[5][5];, que criaria um array bidimensional retangular.
  • (E) Incorreta: (Armadilha da banca) Esta é a alternativa mais tentadora. Embora NullPointerException seja um erro comum com arrays denteados não inicializados, neste código específico, o comando dados[i] = new int[5]; dentro do primeiro loop garante que cada sub-array (dados[i]) seja inicializado com um novo array de inteiros de tamanho 5 antes que o loop interno tente acessar dados[i][j]. Portanto, não ocorrerá NullPointerException no comando dados[i][j] = i + j;.

Fonte: FCC TRT14 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho