Problema com while(true)

3 respostas
B

Tenho uma classe que é o “motor” do meu jogo de xadrez, ele faz a chamada da Tela e passa por parametro uma classe tabuleiro.
Dentro da classe tabuleiro, tem um atributo static que é do tipo boolean.
Após a jogada ser feita na interface grafica, o atributo static é modificado.
até ai tudo ok, ele chama a IA, ela faz a jogada e roda tudo perfeito, porem se eu remover a linha que fica imprimindo o “testando”, o atributo é modificado normalmente, mas aparentemente o while para de funcionar.

o if simplismente para de ser testado.

assim funciona

while(true){ System.out.println("testando"); if(tab.getJogou()){ System.out.println("ok"); Jogada j = storm.buscarMovimento(tab); tab.moverPeca(j.getPeca(), j); t.atualizar(tab); tab.setJogou(false); } }

assim não

while(true){ if(tab.getJogou()){ System.out.println("ok"); Jogada j = storm.buscarMovimento(tab); tab.moverPeca(j.getPeca(), j); t.atualizar(tab); tab.setJogou(false); } }

por que o while para de funcionar?

3 Respostas

ViniGodoy

Só analisando o resto do seu código para saber…

B

Parece ser eliminação de código morto. Se getJogou começa como false, e não tem nada no código que mude ele para true, então esse código nunca irá rodar. O compilador otimiza o programa retirando esse loop do código final.

B

hmm… isso esclarece minha duvida.
Agora que voce falou acredito que seja exatamente isso.

Mas como posso fazer para que a classe principal possa ficar testando isso sem colocar esses System.out?
ou como posso fazer para que alguma coisa seja chamada na classe principal quando a variavel for jogada?

por que se eu fizer a chamada direto da classe que controla a tela, ela fica “congelada” até a IA terminar de calcular qual a melhor jogada.

Criado 27 de fevereiro de 2013
Ultima resposta 28 de fev. de 2013
Respostas 3
Participantes 3