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
- Aocorrerá uma exceção do tipo NullPointerException, pois na terceira linha não foi definido o número de linhas da array dados.
- Bao tirar o comando `dados[i] = new int[5];` o programa executará normalmente.
- C`i < 5` na quarta linha pode ser substituído por `i < dados.length` sem afetar a lógica de execução. (alternativa correta)
- Do comando `int[][] dados = new int[5][];` precisa obrigatoriamente ser substituído por `int[][] dados = new int[5][5];`.
- Eocorrerá uma exceção do tipo NullPointerException no comando `dados[i][j] = i + j;`.
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ãonull, mas não causaNullPointerExceptionna declaração. - (B) Incorreta: Se o comando
dados[i] = new int[5];fosse removido, o programa tentaria acessardados[i][j]quandodados[i]ainda serianull(pois não teria sido inicializado com um array real), o que resultaria em umaNullPointerExceptionno comandodados[i][j] = i + j;. - (C) Correta:
dados.lengthretorna o número de elementos no arraydados, que neste caso é 5 (o tamanho da primeira dimensão). Portanto,i < 5ei < dados.lengthsão equivalentes e podem ser usados de forma intercambiável sem alterar a lógica de execução. Usardados.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 porint[][] dados = new int[5][5];, que criaria um array bidimensional retangular. - (E) Incorreta: (Armadilha da banca) Esta é a alternativa mais tentadora. Embora
NullPointerExceptionseja um erro comum com arrays denteados não inicializados, neste código específico, o comandodados[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 acessardados[i][j]. Portanto, não ocorreráNullPointerExceptionno comandodados[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.