NullPointerException

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

[quote]Exception in thread “main” java.lang.NullPointerException
at Baralho.geraBaralho(Baralho.java:12)
at Jogo.main(Jogo.java:5)[/quote]

Classe Jogo

[code]
public class Jogo {

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

}[/code]

Classe Cartas

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

}[/code]

Classe Baralho

[code]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());

}

}[/code]

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:[code]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”); [/code]

da new no objeto

É, 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. =]

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

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. =(

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


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];
        }
    }
}

Precisa instanciar o Random.

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

falta instanciar aleatorio