NullPointerException

7 respostas
B

Porque dá esse erro?
Não estou conseguindo entender...

Exception in thread "main" java.lang.NullPointerException at Baralho.geraBaralho(Baralho.java:12) at Jogo.main(Jogo.java:5)
Classe Jogo
public class Jogo {

    public static void main(String[] args){
            Baralho novo = new Baralho();
            novo.geraBaralho();
    }
}

Classe Cartas

public class Cartas {
    private int valor; //Valor de compargação das cartas
    private String numero; //Numeração da carta
    private String naipe; //Naipe das cartas
    private String imagem; //Campo para armazenar link da imagem

    /**
     * @return the valor
     */
    public int getValor() {
        return valor;
    }

    /**
     * @param valor the valor to set
     */
    public void setValor(int valor) {
        this.valor = valor;
    }

    /**
     * @return the numero
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return the naipe
     */
    public String getNaipe() {
        return naipe;
    }

    /**
     * @param naipe the naipe to set
     */
    public void setNaipe(String naipe) {
        this.naipe = naipe;
    }

    /**
     * @return the imagem
     */
    public String getImagem() {
        return imagem;
    }

    /**
     * @param imagem the imagem to set
     */
    public void setImagem(String imagem) {
        this.imagem = imagem;
    }
}

Classe Baralho

public class Baralho {

    //cria vetor do baralho
    Cartas[] monte;

    public void geraBaralho() {

        //determina quantidade de posicoes do baralho
        monte = new Cartas[40];

        //4 de espada
        monte[0].setValor(0);
        monte[0].setNumero("4");
        monte[0].setNaipe("Espada");
        monte[0].setImagem("4_espada");
        
        System.out.println(monte[0].getValor());

    }
}

7 Respostas

Rodrigo_Sasaki

Você declarar um array, não quer dizer que as variáveis nos índices estão instanciadas, até você instanciá-las, elas serão nulas.

faltou dar um new em Cartas, assim:
monte = new Cartas[40];  
   
//4 de espada  
monte[0] = new Cartas();
monte[0].setValor(0);  
monte[0].setNumero("4");  
monte[0].setNaipe("Espada");  
monte[0].setImagem("4_espada");
M

da new no objeto

linngallo

É, isso.

Aqui:

//4 de espada  
        monte[0].setValor(0);  
        monte[0].setNumero("4");  
        monte[0].setNaipe("Espada");  
        monte[0].setImagem("4_espada");

Você está setando as variáveis de um objeto que não existe na memória. =]

B

Rapaz, pra mim era suficiente iniciar assim: monte = new Cartas[40]; e não sabia que tinha que instanciar cada espaço do array depois. Já testei aqui e deu certo, muito obrigado a todos : digaoneves, michelorth_92 e linngallo

B

Muitos problemas com array, mas dessa vez deu esse erro de NullPointerException na linha do aleatorio. Por que?
Estou me desanimando muito por causa disso. =(

Exception in thread “main” java.lang.NullPointerException
at Partida.(Partida.java:28 )

import java.util.Random;

/**
 *
 * @author bruno
 */
public class Partida {

    Cartas[] embaralhado;
    Cartas[] j1;
    Cartas[] j2;
    Cartas[] j3;
    Cartas[] j4;
    Random aleatorio;
    Cartas temporario;
    int posicao = 0;
    
    public Partida() {
        Baralho jogo = new Baralho();
        embaralhado = new Cartas[40];
        j1 = new Cartas[3];
        j2 = new Cartas[3];
        j3 = new Cartas[3];
        j4 = new Cartas[3];
        
        //gera baralho com cartas aleatorias
        for (int i = 0; i < 40; i++) {
            posicao = aleatorio.nextInt(40);
            temporario = new Cartas();
            temporario = jogo.monte[i];
            embaralhado[i] = jogo.monte[posicao];
            embaralhado[posicao] = temporario;
        }
        
        //distribui valores para jogador 1
        for (int i = 0; i < 3; i++){
            j1[i]=embaralhado[i];
        }
        
        //distribui valores para jogador 2
        for (int i = 3; i < 6; i++){
            j2[i]=embaralhado[i];
        }
        
        //distribui valores para jogador 3
        for (int i = 6; i < 9; i++){
            j3[i]=embaralhado[i];
        }
        
        //distribui valores para jogador 4
        for (int i = 9; i < 12; i++){
            j4[i]=embaralhado[i];
        }
    }
}
ErickRAR

Precisa instanciar o Random.

M

caramaba c ta com serios problemas com instanciação de objetos…
posicao = aleatorio.nextInt(40);

falta instanciar aleatorio

Criado 21 de junho de 2012
Ultima resposta 24 de jun. de 2012
Respostas 7
Participantes 5