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



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