Lista de discussão de MAC 212
[Prévia por Data][Próxima por Data]
[Prévia por Assunto][Próxima por Assunto]
[Índice por Data][Índice por Assunto]
[Envie uma nova mensagem para a lista]
[Responda esta mensagem]
RE: Ainda volta jogada
- Subject: RE: Ainda volta jogada
- From: Alfredo Goldman <gold@ime.usp.br>
- Date: Mon, 25 Jun 2001 19:51:42 -0300
Ola,
Desculpe a demora (hoje foi um dia dificil), mas ai
vão as respostas a todas as suas perguntas.
> To: "Lista MAC 212" <gold-mac212@ime.usp.br>
> Subject: Ainda volta jogada
> Professor (ou alguem da lista)
> Estou com problemas na minha funcao recursiva. Ela nao volta a jogada
> corretamente apenas a ultima.
> a minha funcao é mais ou menos assim:
> recursao{
> se (n<numero de recursoes desejado)
> faz a jogada;
> n++;
> chama recursao;
> voltaJogada;
>}
> mas nao esta voltando todas as jogadas somente a ultima...
Não vejo a razão do problema, apenas tenho um palpite. Caso você esteja
usando uma função de entrada na recursão, você provavelmente esqueceu
de fazer o voltaJogada na função (propriamente dita) de recursão
> Esta acontecendo um erro estranho aqui no meu programa e eu
> nao consigo identificar a causa (claro) aparece o seguinte:
> java.lang.NullPointerException
> at Tabuleiro.coloca(Track.java:129)
> at Comp.coloca(Track.java:897)
> at Track.main(Track.java:1123)
> Exception in thread "main" Process Exit...
> na linha que ocorre o erro (129) eu tenho o codigo:
> record[lastJogada].setEspecie(last);
> record é um vetor de objetos do tipo Jogada e setEspecie é um metodo que
> "seta" o campo especie da minha classe Jogada com o que tem em 'last'.
> Estes sao os campos da minha classe Jogada:
> class Jogada
> {
> char vez;
> String especie;
> int posOrigem, posDestino;
> int posRetirada;
> (...)}
> ah.. e eu nao tenho nenhum construtor nesta classe... e nao saberia =
> faze-lo tambem...
> ja que eu quero um vetor de jogadas no meu programa. Se alguem puder me =
> ajudar...
Este erro ocorre quando tenta-se chamar um método de um objeto que não foi
criado, o que deve estar acontecendo é que em algum momento do programa o
objeto referido por record[lastJogada] é NULL.
> Alguém saberia me dizer porque uma chamada de recursao
> detona todas as minhas variaveis (fora do metodo recursivo) ?
> Eu tenho um controle de jogadas que grava todas as jogadas feitas, mas
> quando chamo o metodo recursivo todas, simplesmente, todas as jogadas desse
> meu controle sofrem alteracao (todas ficam como se fosse a ultima jogada que
> o metodo recursivo faz).
Mais uma vez vou dar apenas um palpite. Se nesta chamada recursiva você passa
como parâmetro um objeto que contém campos com as tais variáveis, e nas
chamadas você modifica estas variáveis, elas serão "detonadas" conforme as
modificações... Possibilidades de correção
1) Você pode criar novos objetos, semelhantes aos antigos (veja o método
clone()) e passar este novos objetos como parâmetros na recursão
2) Você pode fazer uma recursão mais cuidadosa que a cada passo volta as
variáveis ao estado inicial (afinal a resposta que você quer da recursão é
apenas a melhor jogada a fazer...)
ufa, acabei
Alfredo