Considere a classe Java abaixo.public class Teste { ...
public class Teste {
public static void main(String[ ] args) {
int [ ] num = {0, 0, 0, 0, 0, 0, 0};
int c;
c = 0;
while (num [c] != 10 && c < 7 ) {
c++;
}
System.out.print(c);
}
}
Ao compilar e executar esta classe, será
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - exibida mensagem de erro Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7.
Vamos entender o motivo pelo qual a alternativa B é a correta. A questão apresenta um programa em Java onde há um array num
inicializado com 7 elementos, todos com valor 0. É declarada uma variável c
que é inicializada com o valor 0 e é usada para iterar sobre o array dentro de um loop while
.
O loop while
continua a executar enquanto o valor do elemento no índice c
do array num
for diferente de 10 e c
for menor que 7. Como todos os elementos do array num
são inicialmente 0, a primeira condição (num[c] != 10
) será sempre verdadeira. Portanto, a continuação do loop dependerá apenas da segunda condição (c < 7
).
A cada iteração do loop, a variável c
é incrementada em 1. Quando c
atinge o valor 7, a condição c < 7
não será mais verdadeira, e o loop deveria terminar. No entanto, antes da checagem da condição, o código tenta incrementar c
uma última vez, resultando em c
sendo igual a 7. Isso causa uma tentativa de acessar num[7]
, que é um acesso fora dos limites do array (o último índice válido é 6, já que os arrays em Java são indexados a partir de 0).
Quando um código em Java tenta acessar um índice de array que está fora dos seus limites, é lançada uma exceção ArrayIndexOutOfBoundsException
. Por isso, a alternativa correta é a que menciona essa exceção específica, já que ela é exatamente o que aconteceria ao executar o código fornecido.
Portanto, ao executar o programa, antes de o loop terminar naturalmente, ocorrerá um erro devido à tentativa de acessar um índice de array que não existe, resultando na exceção mencionada na alternativa B.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
1 - ele testa se 6 é menor que 7--- não é
2 - adiciona + 1
3 - ao fazer c[7] --> dá pau, pois apesar do array ter tamanho 7, é 0 based, ou seja, os índices vão de 0 a 6
Concordo com amigo amigo acima
realmente se c++ estive-se depois do System.out.print(c); não daria o erro! (pegadinha hen.)
Não concordo Anderson, porque o erro está quando é executado a instrução num [c], sendo que o array está na posição 7, que não existe. Fiz o famoso "chinezinho" para testar a questão.
Estaria correta se a instrução c<7 fosse substituída por c<6, considerando que as posições começam a contar a partir de 0.
Se o while estivesse assim : while( c -Quando c=7 o laço se quebra na primeira condição (7
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo