[RESOLVIDO]NullPointerException

6 respostas
F

Olá!

Estou com um problema em um projetinho que estou fazendo...
public class Jogador {
	private String nome;
	private int numca;

	public Jogador(String nome, int numca) {
		super();
		this.nome = nome;
		this.numca = numca;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getNumca() {
		return numca;
	}

	public void setNumca(int numca) {
		this.numca = numca;
	}

}
import java.util.Arrays;
import javax.swing.JOptionPane;

public class TimeSalao {
	private Jogador[] jog = new Jogador[5];
	private String nomeTime;


//construtor editado depois da dica do nel
	public TimeSalao(String nome) {
		nomeTime = nome;
		String auxiliar = "";
		
		for (int i = 0; i < jog.length; i++) {
			auxiliar = JOptionPane.showInputDialog("Digite um nome ao jogador: ");
			Jogador jogador = new Jogador(auxiliar, i+1);// i+1 significa que o número da camiseta do jogador será o numero do índice + 1

			jog[i]= jogador;
			
		}

	}

	public String getNomeTime() {
		return nomeTime;
	}

	public void setNomeTime(String nomeTime) {
		this.nomeTime = nomeTime;
	}

	
	@Override
	public String toString() {
		
		return "Time "+nomeTime+ "[jog=" + Arrays.toString(jog) + "]";
	}

	public void setJog(Jogador j) {
		for (int i = 0; i < jog.length; i++)
			if (jog[i] == null)
				jog[i] = j;
		System.out.println("Time cheio.");
	}

}
public class JogoSalao {
	private TimeSalao time1;
	private TimeSalao time2;
	private int placart1;
	private int placart2;

	public JogoSalao(TimeSalao time1, TimeSalao time2) {
		super();
		this.time1 = time1;
		this.time2 = time2;
		placart1 = -1;
		placart2 = -1;
	}

	public int getPlacart1() {
		return placart1;
	}

	public void setPlacart1(int placart1) {
		this.placart1 = placart1;
	}

	public int getPlacart2() {
		return placart2;
	}

	public void setPlacart2(int placart2) {
		this.placart2 = placart2;
	}

	public void setResultadoJogo(int t1, int t2) {
		placart1 = t1;
		placart2 = t2;
	}

	public String imprimeEscalacao() {
		String t1 = "";
		t1 = time1.toString() + "\n" + time2.toString();
		return t1;

	}
	public String imprimeResultado(){
		return time1.getNomeTime()+" : " + getPlacart1()+ " X " +time2.getNomeTime()+" : "+getPlacart2();
		
	}
	

}
import javax.swing.JOptionPane;

public class PrimeiraFaseCampeonatoSalao {
	private JogoSalao[][] jogo;

	public PrimeiraFaseCampeonatoSalao() {
		super();
		jogo = new JogoSalao[5][5];

	}

	public boolean adicionaJogo(JogoSalao j, int dia, int hora) {
		// for(int linha = 0;linha<jogo.length;linha++)
		// for(int coluna = 0;coluna<jogo[linha].length;coluna++)
		if (jogo[dia][hora] == null) {
			jogo[dia][hora] = j;
			return true;
		}
		return false;
	}

	public void imprimeTabela() {
		String dia = "";
		String hora = "";

		for (int linha = 0; linha < jogo.length; linha++) {
			for (int coluna = 0; coluna < jogo[linha].length; coluna++) {
				if (jogo[linha][coluna] != null) {
					if (linha == 0)
						dia = "Segunda-feira";
					else if (linha == 1)
						dia = "Terça-feira";
					else if (linha == 2)
						dia = "Quarta-feira";
					else if (linha == 3)
						dia = "Quinta-feira";
					else if (linha == 4)
						dia = "Sexta-feira";
					else if (coluna == 0)
						hora = "14h";
					else if (coluna == 1)
						hora = "16h";
					else if (coluna == 2)
						hora = "18h";
					else if (coluna == 3)
						hora = "20h";
					else if (coluna == 4)
						hora = "22h";

					JOptionPane.showMessageDialog(null, "Jogo: "
							+ jogo[linha][coluna]);
					JOptionPane.showMessageDialog(null, "Dia: " + dia + " - "
							+ "Horário: " + hora);
					if (jogo[linha][coluna].getPlacart1() != -1
							&& jogo[linha][coluna].getPlacart2() != -1)
						JOptionPane.showMessageDialog(null, "Resultado: "
								+ jogo[linha][coluna].getPlacart1() + " x "
								+ jogo[linha][coluna].getPlacart2());

				}

			}
		}
	}

	public void informaResultado(JogoSalao j, int p1, int p2) {
		for (int linha = 0; linha < jogo.length; linha++) {
			for (int coluna = 0; coluna < jogo[linha].length; coluna++) {
				if (jogo[linha][coluna] == j) {
					jogo[linha][coluna].setPlacart1(p1);
					jogo[linha][coluna].setPlacart2(p2);
				}
			}

		}
	}
}
public class Principal {

	public static void main(String[] args) {
		PrimeiraFaseCampeonatoSalao primeira = new PrimeiraFaseCampeonatoSalao();

		/**
		 * int dia = 0; int hora = 0;
		 */

		TimeSalao t1 = new TimeSalao("Time 1");
		TimeSalao t2 = new TimeSalao("Time 2");
		JogoSalao jogo1 = new JogoSalao(t1, t2);
		primeira.adicionaJogo(jogo1, 0, 0);// segunda14h

		TimeSalao t3 = new TimeSalao("Time 3");
		TimeSalao t4 = new TimeSalao("Time 4");
		JogoSalao jogo2 = new JogoSalao(t3, t4);
		primeira.adicionaJogo(jogo2, 3, 0);// quinta14h

		TimeSalao t5 = new TimeSalao("Time 5");
		TimeSalao t6 = new TimeSalao("Time 6");
		JogoSalao jogo3 = new JogoSalao(t5, t6);
		primeira.adicionaJogo(jogo3, 1, 1);// terça16h

		TimeSalao t7 = new TimeSalao("Time 7");
		TimeSalao t8 = new TimeSalao("Time 8");
		JogoSalao jogo4 = new JogoSalao(t7, t8);
		primeira.adicionaJogo(jogo4, 2, 2);// quarta18h

		TimeSalao t9 = new TimeSalao("Time 9");
		TimeSalao t10 = new TimeSalao("Time 10");
		JogoSalao jogo5 = new JogoSalao(t9, t10);
		primeira.adicionaJogo(jogo5, 3, 3);// quinta20h

		TimeSalao t11 = new TimeSalao("Time 11");
		TimeSalao t12 = new TimeSalao("Time 12");
		JogoSalao jogo6 = new JogoSalao(t11, t12);
		primeira.adicionaJogo(jogo6, 4, 4);// sexta22h
		// Tabela montada conforme pedido!
		//Agora imprimir tabela dos jogos!
		
		primeira.imprimeTabela();
		
	}

}

Alguém sabe me dizer porque está acontecendo isso?

Creio que seja um erro bem fácil de achar, mas não estou encontrando...

Ps.: o programa deve ter mais erros, visto que estou começando a testá-lo agora.

Abraços

6 Respostas

Lucas_Abbatepaolo

Posta o erro gerado…completo…assim fica mais facil pra localizar onde esta acontecendo…

nel

Boa tarde.

NullPointerException é quando um objeto nulo tenta acessar algum método e/ou valor. Basicamente, é isso.
Veja:

private Jogador[] jog = new Jogador[5];
O que está fazendo aqui ? Eu respondo. Está criando um vetor vazio de Objetos Jogador com tamanho 5.
Se fizeres: jog[0] vais ter como resposta um null.

Porque? Porque não foi criado uma instancia de Jogador, entende?
Então faça:

for(....) { Jogador jogador = new Jogador(); //seta os valores no objeto Jogador jog[i] = jogador; //armazena no vetor o objeto jogador

Recomendo ler sobre a API Collections para substituir seu vetor.
Abraços!

F

Sim sim, eu entendi que não podia usar o jog[i] (no caso era null) que iria dar o nullpointer…
O que não estava achando era uma maneira de atribuir um nome ao jogador usando este método, vou tentar assim como vc disse.

Obrigado

Lucas_Abbatepaolo
for (int i = 0; i < jog.length; i++) {  
            //cria a instancia do jogador
             Jogador j = new Jogador();

             String inputNome = JOptionPane.showInputDialog("Digite um nome ao jogador: "); 
             
             j.setNome(inputNome);
             j.setNumca(i+1);  

            //atribui o objeto j no array no indice i
             jog[i] = j;
       }
williamdasflores

public TimeSalao(String nome) { nomeTime = nome; //não teria que colocar this.nomeTime = nome;??? String auxiliar = ""; }

F

williamdasflores:
public TimeSalao(String nome) { nomeTime = nome; //não teria que colocar this.nomeTime = nome;??? String auxiliar = ""; }

Na verdade não, pois usei o parâmetro com nome diferente. Mas se quisesse ter usado não haveria problema algum, compilaria da mesma forma.

Eu particularmente não uso o this, é que estes getters e setters foram o eclipse que fizeram para mim. 8)

Criado 25 de março de 2011
Ultima resposta 25 de mar. de 2011
Respostas 6
Participantes 4