Considere a classe Java abaixo.public class Teste {        ...

Próximas questões
Com base no mesmo assunto
Q535637 Programação
Considere a classe Java abaixo.

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á 


Alternativas

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.

O erro esta em verificar (num [c]  != 10 ) antes de ( c -Desse modo quando 'c' = 7 o programa tenta acessar num[7] (que não exite) para testar a condição (num [c] != 10)

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