Problema ao inserir texto do arquivo em lista duplamente encadeada

8 respostas
P
Ola, estou construindo um jogo de tabuleiro que é uma lista duplamente encadeada os textos das casas deste tabuleiro(cada nó da lista)eu tenho que ler de um arquivo e inserir nas casas certas de acordo com o arquivo.Cada no da lista(casa do jogo é um objeto do tipo casa). O problema é que eu não to conseguindo inserir o conteudo do texto do arquivo na lista :( Alguém poderia me ajudar a encontrar o erro?obg Meu codigo é o seguinte:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;
public class ExecutaJogo {
	
	public static void main(String[] args) {

		//criando um objeto do tipo JogoTabuleiro
		JogoTabuleiro jogo=new JogoTabuleiro();

		//criando variaveis auxiliares
		int quantidadeDeCasas=0,posicao = 0,posicao1=0;
		String pos,pos1;

		//enquanto a quantidade de casas for menor ou igual a 42(tamanho do tabuleiro que foi diponibilizado)
		while(quantidadeDeCasas<=42)
		{
			//eu insiro casas neste tabuleiro
			jogo.insereCasa(new Casa());
			//incremento meu contador
			quantidadeDeCasas++;
		}
		
		try
		{
			//crio um arquivo que contem as ações de algumas casas do tabuleiro
			FileReader fr = new FileReader("tabuleiro.txt");

			//crio um buffer e uma String para a leitura 
			BufferedReader in = new BufferedReader(fr);
			String line = in.readLine();

			//enquanto a linha do arquivo não for vazia 
			while(line!=null)
				
			{
				
				//inserindo as ações do arquivo nas casas do tabuleiro
				String separada[]=line.split("-");	
				pos=separada[0];
				posicao=Integer.parseInt(pos);
				jogo.insereAcao(posicao, separada[1]);
				//pos1=separada[2];
				//posicao1=Integer.parseInt(pos1);
				//jogo.insereAcao(posicao1, separada[3]);
				//jogo.tabuleiro.print();
				line = in.readLine();	
			}
			
			in.close();		
	
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}	
	}

}

8 Respostas

drsmachado

Algum erro?
Exception?
Ele roda e não faz nada?

P

Oi drsmachado,
Ocorre nullpointerexception!
Quando eu coloco um system para exibir os conteudos da lista parece que entra em loop pq fica rodando e não para de exibir o conteudo das listas tipo pela logica deveria aparecer 43 mas aparece muito mais!
E isso não é tudo pois quando eu exibo o texto das casas da lista só a primeira casas esta com o texto lido do arquivo as demais ficam com o valor padrao nenhuma que foi definido no construtor da classe Casa :frowning:
obrigada

drsmachado

Paty, posta o stacktrace do erro, ele irá referenciar uma linha com o nullpointer, aponte no código qual a linha onde o erro acontece, ok?

P
o printstacktrace()exibe o seguinte:
java.lang.NullPointerException
	at JogoTabuleiro.joga(JogoTabuleiro.java:101)
	at ExecutaJogo.main(ExecutaJogo.java:105)
A linha 101 é
cur.getPrevious().getElement().setJogador1(null);
da classe Jogo Tabuleiro e a 105 é da classe Executa Jogo
jogo.joga(j1, valorDoDado);
. O código do método joga é o seguinte:
public void joga(Jogador j, int valorDado)
	{
		//crio um objeto do tipo Random()
		Random r = new Random();
		//crio um contador
		int contador=0;
		//joga o dado
		valorDado = r.nextInt(6) + 1;
		DNode<Casa>cur=tabuleiro.head;
		// move o jogador
		while(contador<=valorDado)
		{
			//se o contador for igual ao valor sorteado
			if(contador==valorDado)
			{
				cur.getElement().getJogador1();
				//seta para null a posição anterior!!!
				cur.getPrevious().getElement().setJogador1(null);
				//lê a ação da nova casa,a qual o jogador pertence no momento
				if(cur.getElement().getAcao()!=null){
					//executo a ação descrita na casa
					
				}
			}
			
			contador++;
		}
Obrigada
drsmachado

Bom, provavelmente o atributo Element, do objeto cur.getPrevious() não está instanciado.
Você precisa, quando criar um cur, setar

cur.getPrevious().setEkement(new Element);
P

Hmm
Não sei drsmachado
pensei q estava fazendo isso com o seguinte DNode<Casa>cur=tabuleiro.head;

tu queres ver as outras classes?é q talvez eu não esteja sendo precisa na explicação
obrigada

drsmachado

É que pela mensagem de erro, ou cur ou Previous ou Element está nulo.

P

não sim eu te entendi e tb acho q o erro seja nesta parte do codigo e o q tu acha d eu tirar a parte que seta para null( cur.getPrevious().getElement().setJogador1(null);) é q eu tinha feito assim pq no exercicio dizia q apos eu trocar um jogador de casa eu deveria star para null ele na casa onde ele estava antes :frowning:
e tu sabe pq não estou inserindo os outros textos do arquivo nas casas?
obrigada

Criado 23 de junho de 2011
Ultima resposta 24 de jun. de 2011
Respostas 8
Participantes 2