[Resolvido] Dúvida exercício Java Use a Cabeça

4 respostas
Allisson_Vitello

Bom pessoal, estava fazendo o exercício Uma pilha de problemas do livro Java use a cabeça, capítulo 3, pág. 49 e fiquei com uma dúvida. Tentei achar sobre esse mesmo exercício na internet, mas o que achei não foi satisfatório. Peço perdão se já temos esse tópico aqui no fórum, pois sou novato e ainda estou engatinhando. Gostaria de ajuda de vocês nesse problema.

O exercício é o seguinte:
Determinar que variáveis de referência apontarão para quais objetos. Nem todas variáveis serão usadas, e alguns objetos podem ser
referenciados mais de uma vez.

class HeapQuiz { int id = 0; public static void main(String [] args) { int x = 0; HeapQuiz [] hq = new HeapQuiz[5]; while ( x < 3 ) { hq[x] = new HeapQuiz(); hq[x].id = x; x = x + 1; } hq[3] = hq[1]; hq[4] = hq[1]; hq[3] = null; hq[4] = hq[0]; hq[0] = hq[3]; hq[3] = hq[2]; hq[2] = hq[0]; } }

Nas respostas diz que as referências:

hq[0] é nulo

hq[1] apontará p/ o objeto id=1;

hq[2] é nulo

hq[3] apontará p/ o objeto id=2;

e o hq[4] apontará p/ o objeto id=0;

Qual seria a interpretação certa nas referências nulas que são hq[0] e hq[2]?
Vamos começar pela referência hq[0].No código diz que ela é igual a referência de hq[3], logicamente ela seria nula, mas embaixo diz que ela é igual a ref. de hq[2], seria então o objeto de id=2, mas hq[2] é igual a ref. de hq[0] que é o objeto de id=0.

Depois temos o hq[2] que é igual a ref. hq[0]. Se ela aponta p/ hq[0] então seu objeto id deveria ser 0. Acho que o certo é continuar o raciocínio, não parar aí. Então voltamos um pouco p/ cima e vemos que se hq[0] aponta p/ hq[3] que é null, então temos uma ref. nula. É isso?

É algo simples, mas me perdi no raciocínio. Obrigado pela ajuda desde já.

4 Respostas

T
hq[3] = hq[1];  //&lt;--- hq[3] recebe ref de hq[1]

hq[4] = hq[1];  //&lt;--- hq[4] recebe ref de hq[1]

hq[3] = null;    //&lt;-------------------------  hq[3] recebe null

hq[4] = hq[0]; // &lt; -- hq[4] tinha ref de hq[1], agora recebe ref de hq[0]

hq[0] = hq[3]; // &lt; -- hq[3] foi setado com null , gora hq[0] recebe ref de hq[3] que é null

hq[3] = hq[2]; // &lt;--  hq[3] era null, agora recebe ref de hq[2]

hq[2] = hq[0]; // &lt; -- hq[2] não era null, agora recebe ref de hq[0] que é null - hq[0] recebeu null de hq[3]

Ajudou?

S

Não. Veja bem:

hq[3] = null;      //hq[3] aponta para null
hq[0] = hq[3];   //aponta para o mesmo objeto que hq[3], ou seja, aponta para null
hq[2] = hq[0];   //aqui você se confundiu. hq[2] aponta para o mesmo que hq[0] e não o contrário. Portanto hq[2] aponta para null também

Não, se ele aponta para o mesmo objeto que hq[0] então ele aponta para null.

Sim. Se você tem:

Object o1;
Object o2;
o1 = new Object();
o2 = o1;
o1 = null;

No final disso, o1 aponta para null e o2 aponta para um objeto (o mesmo que foi instanciado e apontando no inicio por o1).

Espero não ter sido confuso hehe.

Allisson_Vitello

Muito bom. Agradeço. Realmente eu estava raciocinando errado. :thumbup:

Nessa parte foi que eu começei a entender.

J

Esse exercicio na realidade esta na pagina 51 do capitulo 3.

Criado 9 de abril de 2013
Ultima resposta 10 de abr. de 2013
Respostas 4
Participantes 4