Exception in thread "main" java.lang.NullPointerException

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)

[code]
/**
*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;
      }
      }[/code]

o método calcular probabilidade é esse

public ListaProbabilidade calcularProbabilidade(String nome) throws IOException {}

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.

Esta retornando nulo na linha