Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

2. Declare, instancie, inicialize e use um array uni-dimensional - Array de referências - Exer.5

Poderia me explicar este código? Confesso que chutei a resposta. -Não entendo porque ele ainda imprime -5 e dá erro!!!

Obrigado!

2 respostas
solução!

Oi Adauto,

Pra ficar mais claro, vamos fazer o famoso "chinês".

Começamos inicializando o vetor x com 3 posições: x[vazio, vazio, vazio];

Iniciamos a iteração com x[1]=x.lenght-1. Isso quer dizer que o vetor x no campo [1] tem o valor de 2. E a cada iteração, iremos diminuir em 1 o valor de x[1](que é a nossa parte de x[1]--). Portanto, nosso vetor nesse momento está assim: x[vazio, 2, vazio];

Percebe então que na primeira vez, iremos colocar o valor -5 dentro do vetor no campo x[x[1]]. Podemos ver que o valor de x[1] é 2. Logo, iremos inserir na posição 2. Nosso vetor ficará assim agora:

x[vazio, 2, -5]; E printamos o x[1]: 2.

Na segunda iteração, o nosso x[1] é igual a 1(diminuímos 1 do valor). Portanto, iremos colocar o valor -5 na posição 1 do vetor x. Ficando assim:

x[vazio, -5, -5]; E printamos o x[1]: -5.

Ja na terceira, diminuímos novamente o valor de x[1]. Porém podemos ver que ele vale -5! Então o novo valor dele será -6. Ao tentar inserir o -5 no vetor x, não conseguiremos, pois estamos tentando acessar a posição x[-6], na qual não existe, e por isso lança a exception. Perceba que ela mesma diz isso:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -6

Espero que tenha ficado mais claro :)

Legal Silvio, bem explicado, consegui assimilar.