Exception in thread "main" java.lang.NullPointerException after first run

0
exercicio02.CaracterSort.buscarJogador(CaracterSort.java:116)
    at exercicio02.CaracterSort.cadastro(CaracterSort.java:110)
    at exercicio02.CaracterSort.main(CaracterSort.java:39)

When I run the code the first time it runs beauty. But in the next few times it does not work anymore.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Random;
import java.util.Scanner;


public class CaracterSort {
    private static int inteiro;        
    private static String sequencia = "";
    private static Random gerador = new Random();
    private static Scanner leitor = new Scanner(System.in);
    private static char[] possibilidades = "abcdefghijklmnopqrstuvwxyz0123456789@!#*".toCharArray();
    private static String resposta;
    private static long tempo;
    private static File arquivo = new File("Teste.obj");
    private static Jogador jogador;
    private static Jogador[] jogadores = new Jogador[50];
    private static int qtdeJogadores = 0;
    private static boolean continua = true;
    private static int numPalavras = 0;

    public static void main(String[] args) {
        lerJogadores();
        cadastro();                    
        jogador.qtdePalavras = 0;
        while(continua == true) {
            sequencia = gerarSequencia();
            System.out.println(sequencia);
            jogador.ultimaPalavra = sequencia;            
            setTempo();
            System.out.print("Digite a sequência na sua tela: ");
            resposta = leitor.next();            
            if(resposta.equals(sequencia)) {
                if(getTempo() > 6) {
                    System.out.println("Sua resposta está correta. Porém, você não conseguiu antes dos 6s");
                    continua = false;
                } else {
                    System.out.println("Sua resposta está correta e você conseguiu antes do tempo: "+getTempo()+"s.");
                    continua = true;
                    numPalavras += 1;                    
                    jogador.historico[jogador.qtdePalavras] = sequencia+" | "+getTempo()+"s";
                    jogador.qtdePalavras++;
                }
            } else {
                System.out.println("Resposta incorreta.");
                continua = false;
            }            
        }
        //Se ele ultrapassar o recorde de acerto de palavras seguidamente, eu atualizo.
        if(numPalavras > jogador.palavrasSeguidas) {
            jogador.palavrasSeguidas = numPalavras;
        }
        imprimirJogador(jogador);
        salvarJogadores();
    }

    public static String gerarSequencia() {
        sequencia = "";
        for(int i = 0; i < 5; i++) {
            inteiro = gerador.nextInt(possibilidades.length);                        
            for(int j = 0; j < possibilidades.length; j++) {
                if(possibilidades[j] == possibilidades[inteiro]) {
                    sequencia += possibilidades[j];
                }
            }            
        }        
        return sequencia;
    }

    public static void setTempo() {
        tempo = System.currentTimeMillis();
    }

    public static long getTempo() {
        return (System.currentTimeMillis() - tempo)/1000;
    }

    public static void lerJogadores() {
        try {
            ObjectInputStream saida = new ObjectInputStream(new FileInputStream(arquivo));
            jogadores = (Jogador[]) saida.readObject();
            while(jogadores[qtdeJogadores] != null && qtdeJogadores < 50) {
                qtdeJogadores += 1;
            }            
        } catch(FileNotFoundException e) {

        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static void cadastro() {
        System.out.print("Digite o nome do Jogador: ");
        String nome_jogador = leitor.next();        
        jogador = buscarJogador(nome_jogador);        
    }

    public static Jogador buscarJogador(String nome) {
        Jogador jogador = null;        
        for(int i = 0; (i < qtdeJogadores) && (jogador == null); i++) {              
            if(jogadores[i].nome.equalsIgnoreCase(nome)) {
                jogador = jogadores[i];
            }              
        }
        if(jogador == null) {
            jogador = new Jogador();
            jogador.nome = nome;            
            if(qtdeJogadores < 50) {
                jogadores[qtdeJogadores] = jogador;
                qtdeJogadores += 1;
            }
        }        
        return jogador;
    }

    public static void imprimirJogador(Jogador jogador) {
        System.out.println("----- Info do Jogador "+jogador.nome+" -----");
        System.out.println("Nome: "+jogador.nome);
        System.out.println("Recorde de palavras seguidas: "+jogador.palavrasSeguidas);
        System.out.println("Última palavra acessada: "+jogador.ultimaPalavra);
        System.out.println();
        System.out.println("histórico de palavras e tempo");
        System.out.println("Palavra | Tempo");
        for(int i = 0; i < jogador.qtdePalavras; i++) {
            System.out.println(jogador.historico[i]);
        }
    }

    public static void salvarJogadores() {
        try {
            ObjectOutputStream saida = new ObjectOutputStream(new FileOutputStream(arquivo));
            saida.writeObject(jogadores);
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Player Class

import java.io.Serializable;


public class Jogador implements Serializable{
    public static String nome;
    public static int palavrasSeguidas;
    public static String ultimaPalavra;
    public static String[] historico = new String[50];
    public static int qtdePalavras = 0;

    public static void main(String[] args) {
        while(historico[qtdePalavras] != null && qtdePalavras < 50) {
            qtdePalavras += 1;
        }
    }
}
    
asked by anonymous 19.09.2015 / 22:05

0 answers