Não consigo resolver o problema

7 respostas
C

Vou tentar ser claro! Desculpe se eu não for.

Estou pegando um valor no estilo matriz e tranformando em string
EX:
123
456 -> ‘123456780’
780

E aplicando regra daquele jogo de quadrado de 8 peças e agrupando numa fila.

Então por exemplo o estado que eu dei como exemplo seria a String A (na verdade um StringBuffer)

Fila [A]

Então ele retira o A da fila e analisa, como são só duas movimentações possiveis ele cria as String B,C

Fila[B,C]

Sei criar as filas e criei as regras.
Para aplica as regras eu faço um copia da string Matriz, numa string Buffer (uma stringbuffer com nome de Buffer) e aplico as regras fazendo as mudanças, caso seja posivel fazer as mudanças eu armazeno na fila.

E depois de feito todos os teste eu carrego a Matriz com o novo valor do que estiver na ponta da fila…e assim vai.

Problema…A fila cria um link (por isto é uma LinkedList()) que liga o que estiver na Matriz na fila, mas quando eu mudo o valor da matriz, tudo se altera e baubau tudo que eu fiz e o programa fica num lop infinito tentanto achar uma resposta impossivel.

A minha pergunta é como criar esta fila, usando a mesma ideia de copia o que eu tiver nos StringBuffer, sem aparece estes problemas. Isto é armazenar as coisas na fila sem perder???

Fiquei o noite em cima disto e nada !!!

7 Respostas

C

O q eu entendi é q qdo vc muda um objeto toda a configuração q vc já tinha muda e acaba estragando o problema, é isso?

Se for, em vez de passar a objeto, passe seu clone, por exemplo, se string é um objeto do tipo String, use:

string.clone();

Com isso vc não usa mais a mesma referência, e se mudar o objeto vc não vai mais mudar o q está na lista.

[]'s
carisio

C

Então quando eu for jogar na fila, eu jogo o clone dele? É isto ?

Mas o stringbuffer tem clone ?

C

Isso mesmo

clone é um método de Object, mas não sei se a classe StringBuffer sobrescreve esse método corretamente.

Faz assim, cria o seu clone:

Em vez de inserir stringbuffer (supondo q é um objeto do tipo StringBuffer), insira na sua LinkedList

new StringBuffer(stringbuffer.toString().toCharArray());

[]'s
carisio

C

Desculpe mas sou bem inciante…

ficaria assim:

Minha linklista se chama ARVORE

então fica ARVORE.ADD ( new StringBuffer(stringbuffer.toString().toCharArray()); ) ???

Sendo que o String buffer que eu quero chamase matriz

Ele vai fazer isto, mais ou menos 380.000 vezes…vou conseguir encadear todos os clones ???

C

O ; fica no final e o add, se não me engano, é minúsculo.

ARVORE.add ( new StringBuffer(matriz.toString().toCharArray()) );

Também não sei se isso vai resolver o seu problema, o q eu disse é q dessa forma sua linked list terá acesso a cópias de sua matriz e não diretamente a matriz.

E qto a performance, não tenho nem idéia se vai rodar blz, vai depender do resto do código tb.

Mas é isso aí, boa sorte! :slight_smile:

[]'s
carisio

C

Mas nao vai acavalar as copias ? tentei crar um tipo de array para assim ter certeza que cada copia estará num array diferente e inviolavel, mas nao funcionou…

C

Como assim acavalar as copias?

Passando o clone, vc não passar o objeto, mas uma cópia dele. Se vc fizer isso de novo, vai ter 2 cópias dele, e por aí vai. Se vc vai fazer isso várias vezes, tem q limpar a linked list antes de colocar os novos clones, mas isso vai ficar lento pra caramba, já q vc vai rodar isso 380.000 vezes…

Criado 12 de maio de 2004
Ultima resposta 13 de mai. de 2004
Respostas 7
Participantes 2