Exception in thread "main" java.lang.NullPointerException

2 respostas
D
gostaria de saber porque quando eu chamo o método calcularProbabilidade abaixo dar
Exception in thread "main" java.lang.NullPointerException
        at GeoplanoAPI.JogadaAleatoria.processaJogada(JogadaAleatoria.java:78)
/**
 *Classe responsavel por implementar os metodos das jogadas aleatorias para o jogo
 * @author Diego Balbinoi
 */
public class JogadaAleatoria implements Jogada {

    /**
     * armazena a posição da jogada da inteligencia
     */
    private Posicao melhorJogada;
     /**
     * armazena a variavel inicializacao da jogada da inteligencia
     */
     private VariaveisInicializacao variavel;
     
     /*
      *
      **/
     private CalculaProbabilidade calcula;
     
     /*
      *
      **/
     private ListaProbabilidade lista;

    public JogadaAleatoria() {
    }

    /**
     * metodo que processa a melhor jogada aleatoria
     * @param posicoes
     * @param valores
     */
    public void processaJogada(ArrayList posicoes, ValoresJogada valores) {

       
        /**
         * posição auxiliar que armazena as jogadas retiradas da lista de jogadas
         */
        Posicao novaPos = null;
        /**
         * comp é uma variavel complementar somada a i ou j para obter o valor I ou J das extremidades da jogada
         */
        int comp = (valores.getLado() - 1);
        /**
         * variavel para armazenar o tabuleiro
         */
        boolean tab[][] = valores.getTabueiro();
        /**
         * variavel que recebe o valor I da jogada
         */
        int i;
        /**
         * variavel que recebe o valor J da jogada
         */
        int j;
         /**
         * armazena o valor da melhor jogada
         */
        double valorJogada = 0.0;
        /**
         * armazena o valor das jogadas
         */
        double valorAux=0.0;
        
        if(valores.getLado()==1){
            try {
                lista=calcula.calcularProbabilidade("l1.txt");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            NoProbabilidade n=lista.inicio;
            // n=variavel.getNl1();
            System.out.println("o valor de iii"+n.pI);
             //for enquanto existir posiçoes na lista
            for (int aux = 0; aux < posicoes.size(); aux++) {
                novaPos = (Posicao) posicoes.get(aux);
                i = novaPos.getI();
                j = novaPos.getJ();
                while(n.pI!=i && n.pJ!=j){
                    n=n.proxProbabilidade;
                }       
            
                valorAux=n.probabilidade;
                valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);                
            }
        }
        else if(valores.getLado()==2){
             try {
                lista=calcula.calcularProbabilidade("l2.txt");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            NoProbabilidade n=lista.inicio;
            //NoProbabilidade n=variavel.getNl2();
            System.out.println("o valor de iii"+n.pI);
             //for enquanto existir posiçoes na lista
            for (int aux = 0; aux < posicoes.size(); aux++) {
                novaPos = (Posicao) posicoes.get(aux);
                i = novaPos.getI();
                j = novaPos.getJ();
                while(n.pI!=i && n.pJ!=j){
                    n=n.proxProbabilidade;
                }       
            
                valorAux=n.probabilidade;
                valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);                
            }
        }
         else if(valores.getLado()==3){
             try {
                lista=calcula.calcularProbabilidade("l3.txt");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            NoProbabilidade n=lista.inicio;
            //NoProbabilidade n=variavel.getNl3();
            System.out.println("o valor de iii"+n.pI);
             //for enquanto existir posiçoes na lista
            for (int aux = 0; aux < posicoes.size(); aux++) {
                novaPos = (Posicao) posicoes.get(aux);
                i = novaPos.getI();
                j = novaPos.getJ();
                while(n.pI!=i && n.pJ!=j){
                    n=n.proxProbabilidade;
                }       
            
                valorAux=n.probabilidade;
                valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);                
            }
        }
         else if(valores.getLado()==4){
             try {
                lista=calcula.calcularProbabilidade("l4.txt");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            NoProbabilidade n=lista.inicio;
           // NoProbabilidade n=variavel.getNl4();
            System.out.println("o valor de iii"+n.pI);
             //for enquanto existir posiçoes na lista
            for (int aux = 0; aux < posicoes.size(); aux++) {
                novaPos = (Posicao) posicoes.get(aux);
                i = novaPos.getI();
                j = novaPos.getJ();
                while(n.pI!=i && n.pJ!=j){
                    n=n.proxProbabilidade;
                }       
            
                valorAux=n.probabilidade;
                valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);                
            }
        }
         else if(valores.getLado()==5){
             try {
                lista=calcula.calcularProbabilidade("l5.txt");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            NoProbabilidade n=lista.inicio;
            //NoProbabilidade n=variavel.getNl5();
            System.out.println("o valor de iii"+n.pI);
             //for enquanto existir posiçoes na lista
            for (int aux = 0; aux < posicoes.size(); aux++) {
                novaPos = (Posicao) posicoes.get(aux);
                i = novaPos.getI();
                j = novaPos.getJ();
                while(n.pI!=i && n.pJ!=j){
                    n=n.proxProbabilidade;
                }       
            
                valorAux=n.probabilidade;
                valorJogada = verificaMelhorJogada(valorAux, valorJogada, novaPos);                
            }
        }     
        
    }

    /**
     * retorna a posicao para a jogada
     * @return pos
     */
    public Posicao getJogada() {
        return melhorJogada;
    }

    /**
     * Metodo que escolhe qual a melhor jogada entre a jogada atual e o melhor estado registrado,
     * eh usado pelo metodo processaJogada() dessa mesma classe.
     * @param valorAux
     * @param valorJogada
     * @param jogada
     * @return
     */
    public double verificaMelhorJogada(double valorAux, double valorJogada, Posicao jogada) {
        if (valorAux > valorJogada) {
            jogada.setValorJogadaAleatoria(valorJogada);
            melhorJogada = jogada;
            return valorAux;
        } else {
            return valorJogada;
        }
    }

    /**
     * Esse metodo verifica todos os espaços vizinhos a jogada, se a jogada tiver uma area completamente
     * vazia ao redor ela ganha pontos a mais que são acrescentados na verificação da melhor jogada
     * @param tab
     * @param i
     * @param j
     * @param comp
     * @return valorAdicional
     */
    public int verificaEspecosAoRedor(boolean tab[][], int i, int j, int comp) {
        /**
         * variavel para contar os espaços ocupados
         */
        int ocupado = 0;
        /**
         * variavel para contar os espaços vazios
         */
        int vazio = 0;
        /**
         * valor adicional que será acrescentado caso haja uma area completamente vazia ao redor
         */
        int valorAdicional = 0;
        /**
         * variavel auxiliar para i
         */
        int auxI;
        /**
         * variavel auxiliar para j
         */
        int auxJ;
        //for para percorrer as casas e contar os espaços vazios e ocupados
        for (auxI = i - 1; auxI <= (i + comp + 1); auxI++) {
            for (auxJ = j - 1; auxJ <= (j + comp + 1); auxJ++) {
                if (tab[auxI][auxJ] == true) {
                    ocupado++;
                } else {
                    vazio++;
                }
            }
        }
        if((ocupado == 1 && vazio == 8) || (ocupado == 4 && vazio == 12) || (ocupado == 9 && vazio == 16) || (ocupado == 16 && vazio == 20) || (ocupado == 25 && vazio == 24)){
            valorAdicional = 25;
        }

        return valorAdicional;
    }
}
o método calcular probabilidade é esse
public ListaProbabilidade calcularProbabilidade(String nome) throws IOException {}
[code]

2 Respostas

tubiluki

provavelmente porque novaPos é nulo.

tem q ver o método que chama esse processaJogada se o ArrayList que tá sendo passado não pode estar passando uma posição nula dentro dele.

Kamikaze

Esta retornando nulo na linha

Criado 28 de maio de 2008
Ultima resposta 28 de mai. de 2008
Respostas 2
Participantes 3