Questão interessante

3 respostas
D

Sou cadastrado num forum de SCJP e postaram
uma questão muito louca que num explicaram a respota ainda
então vou postar aqui para ver se alguem se habilita a explicar ok.

Dado o seguinte código:

public class TesteNew { public static void main(String[] args){ int[] arr = {1,2,3,4}; for (int i: arr){ arr[i] = 0;} for (int i : arr){ System.out.println(i);}}}

Qual será o resultado?

a> prints 0 2 0 0
b> ocorre um erro em tempo de execução
c> prints 0 0 0 0
d> prints 0 0 3 0 >>>>>>>>>>>>>>>>>>>>>>>>> da esse resultado.
e> erro na compilação
f> prints 0 1 2 3

3 Respostas

BrunoBastosPJ

Certo, vamos lá…

O seu foreach está retornando o valor dos elementos do array 1 a 1.
seu array é
0 | 1 | 2 | 3 //Posições
1 | 2 | 3 | 4 //Valores

Na primeira passagem o valor de i é o valor na posição 0 do array, que executa o código:
arr[1] =0;
Então os valores do seu array passam a ser:
0 | 1 | 2 | 3 //Posições
1 | 0 | 3 | 4 //Valores

Na segunda passagem o valor de i será o valor da posição 1, executando o código:
arr[0] = 0;
Então os valores do seu array passam a ser:
0 | 1 | 2 | 3 //Posições
0 | 0 | 3 | 4 //Valores

Na tereceira passagem o valor de i será o valor da posição 2, executando o código:
arr[3] = 0;
Então os valores do seu array passam a ser:
0 | 1 | 2 | 3 //Posições
0 | 0 | 3 | 0 //Valores

Na última passagem do for each o valor de i passa a ser o valor da posição 3 do array, executando novamente o código:
arr[0] = 0;
O que não modifica os valores do seu array, já que o primeiro valor já era 0.

Então os valores do seu array assim que o for each acaba de ser executado é:
0 | 1 | 2 | 3 //Posições
0 | 0 | 3 | 0 //Valores

Questões de certificaão são na maioria das vezes pegadinhas… Na primeira olhada que dei neste código eu pensei que o resultado seria um erro de execução pois na última passagem no for each ele lançaria um ArrayIndexOutOfBoundsException

Abs espero que tenha entendido o que acontece no código.

D

Quase entendi!!!
Ma por o forech pula o indice
[2]???

D

Nem precisa responder ja entendi!!!
Verdade essas questões são
muito bem elaboradas para
confundir o candidato.
vlws man…

Criado 26 de julho de 2008
Ultima resposta 26 de jul. de 2008
Respostas 3
Participantes 2