[Use a Cabeça] Questão da página 49

9 respostas
C

Oi pessoal é minha primeira vez postando aqui no forum, se eu errar qualquer coisa me avisem para poder ajeitar.

Eu estou estudando Java no livro Use a Cabeça e fiquei enrrolado em uma questão chamada:

“Uma pilha de problemas”

Ela cria um inteiro id atribuido de valor 0 e mais adiante é chamada como referência.

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[];
    hq[0] = hq[3];
    hq[3] = hq[2];
    hq[2] = hq[0];
      // executa algo
  }
}

Esse é o código da questão.

A resposta será os valores das variaveis de referência com os seus respectivos objetos.

hq[0] id = 0
hq[1]
hq[2] id = 1
hq[3]
hq[4] id = 2

Eu não entendo a parte do hq[x].id = 0; e não entendo porque o id muda de valor :confused:

Ficarei grato com qualquer resposta!

9 Respostas

douglas_vidotto

Qual é a questão do livro?? O que ele deseja que você faça??

No código que você postou, dentro da classe HeapQuiz, no método main, ele cria um array de 5 posições que podem armazenar objetos HeapQuiz. Então, dentro no while, ele cria 3 objetos HeapQuiz nas 3 primeiras posições do array, certo?
Bom, cada objeto HeapQuiz contém um atributo chamado id. Então, no while, para cada valor de x ele cria um objeto HeapQuiz e armazena esse objeto no array. Logo depois de criar esse objeto, o programa atribue o valor de x da iteração do while na variável id, que é um atributo da classe HeapQuiz, e por isso, cada objeto criado e armazenado no array tem sua própria variavel id com seu respectivo valor que recebeu de x.

C

douglas_vidotto

Minha dúvida é saber como o valor de id muda e o porque.

Obrigado por responder.

Stormqueen1990

O valor de id muda dentro do while:

while (x < 3) { hq[x] = new HeapQuiz(); hq[x].id = x; //muda exatamente aqui x = x + 1; }

onde hq[x].id = x.
Como x está sendo incrementado, a variável id de hq[0], hq[1], e hq[2] receberão respectivamente 0, 1 e 2.

C

Stormqueen1990

Mas id não será sempre 0?

Obs.: Tem algum modo que eu veja quais são as variaveis de referência para seus respectivos objetos?

Obrigado por responder.

desk

Olá, bom, vc cria as variaveis x, id e atribui 0 a elas certo? dai depois cria uma matriz com 5 (0, 1, 2, 3, 4), dai no while ali, enquanto o x for menor que 3 ele vai criar um novo objeto heapquiz e x muda o valor de acordo tb, e vai atribuir o valor de id tb, e vai somando o x, então vai pegar os valores 0,1,2… então o hq[0] tem id 0 e está apontando para o objeto 0, hq[1] tem id 1 e está apontando pro objeto 1, hq[2] tem id 2 e está apontando pro objeto 2, e o resto dos hq estão null, dai ele pega e vai fazendo a referencias dos outros. dai no fim vc ve os que sobraram apontando para quais objeto :wink:

como o x vai alterando vai estar alterando o valor de acordo, como lá embaxo soma. x = x + 1, vai sempre estar mudando, até chegar em menor que 3 (2), e esse valor que vai mudando vai ser o id do tal hq.

espero ter ajudado.

B

não será sempre “0” não.
já que na linha

hq[x].id = x;

tu está atribuindo um valor para a variável x dentro do objeto hq;

B

variável x não, variável “id”;

C

Valeu pessoal, consegui entender.

Obrigado a todos!

Stormqueen1990

Cariele:
Stormqueen1990

Mas id não será sempre 0?

Obs.: Tem algum modo que eu veja quais são as variaveis de referência para seus respectivos objetos?

Obrigado por responder.

Cariele, o fato de uma variável ser inicializada com um valor y não significa que ela sempre terá aquele valor. O que ocorre é que quando não é atribuido um valor a ela, ela permanece com o valor da inicialização.

De resto, os demais já responderam acima.

Criado 14 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 9
Participantes 5