Oi. Preciso de ajuda para um programa que estou fazendo.
Há uma classe com os seguintes campos:
class Item{
String elemento=new String();
boolean cores;
Item direita, esquerda;
}
Se eu faço a operação:
Item A=new Item();
Item B=new Item();
A.elemento="a";
B.elemento="b";
B.direita=A;
A.elemento="c";
System.out.println(B.direita.elemento);
O valor imprimido é “c”.
Porém se faço:
Item C=new Item();
C.elemento="c";
B.direita=A;
A=C;
O valor imprimido é “a”.
Alguém sabe se isso é problema com os apontadores direita, esquerda. Como posso fazer com que no segundo caso o valor imprimido seja “c”?
Obrigado
Qdo vc faz B.direita=A; vc tá falando pra B.direita ser uma referência para o objeto em que A está referenciando, ou seja, B.direita e A apontam para o mesmo lugar.
Qdo vc faz A = C, vc tá falando pra A apontar pro mesmo lugar que o C está apontando, mas o B.direita vai continuar apontando pro objeto que o A estava apontando anteriormente, ou seja, A e C apontam para o mesmo lugar, mas B.direita aponta pro lugar antigo de A.
Se você fizer C = D (D seria um outro obj), A apontaria para o obj que C estaria apontando originalmente e C passaria a apontar pro mesmo objeto que D.
Vc pode ver isso colocando o seguinte código:
System.out.println("a: " + A);
System.out.println("c: " + C);
A=C;
System.out.println("a: " + A);
System.out.println("c: " + C);
System.out.println(B.direita);
Vai sair uma resposta do tipo:
a: teste12.Item@1add2dd
c: teste12.Item@eee36c
a: teste12.Item@eee36c
c: teste12.Item@eee36c
teste12.Item@1add2dd
Ou seja, a está referenciando para o mesmo objeto que c, mas b.direita continua referenciando para o objeto de a.
Pra imprimir c direto, é só vc fazer B.elemento = C, deve imprimir o valor de c.
[]'s
carisio
, mas cara o que você ta imprimindo?!isso?!
System.out.println(B.direita.elemento);
Se você estiver imprimindo isso…vai jogar o “a” mesmo…
Provavelmente se você colocar A.elemento=C;
e depois colocar para imprimir o A.elemento
ele irá imprimir o valor que você quer que é o “c” testa ai ve se da certo! blz?!
Falou cara![/code]
Obrigado pelas respostas.
Na verdade eu precisava de acessar o campo desta maneira mesmo. Preciso implementar uma árvore de pesquisa. E pra inserir itens preciso fazer algumas rotações.
Olha só o que esta acontecendo:
A arvore antes da rotação:
C
A W
T B
U V
A arvore depois da rotação:
B C
A V A W
T U T U
Virou duas árvore.
Como era pra ficar:
C
B W
A V
T U
Para aquelas duas árvores do meio virar a terceira, era necessário atruir B (da primeira) ao A (da segunda). Porém isso não esta funcionando.
Na verdade não daria também, pois no caso de uma arvore menor, o “filho” poderia não ter “pai”.
Vou tentar explicar melhor pois o problema ainda esta incomodando:
Se eu faço:
C.esquerda=A;
A=B;
Há alguma maneira de que o campo “esquerda” do C seja modificado para B?