NullPointer ao tentar criar um baralho

7 respostas
leonardo2204

Galera, estou tentando criar um baralho em Java, mas ao tentar setar as cartas inicialmente, estou recebendo o famoso NullPointerException !

Segue as classes:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Classes;

/**
 *
 * @author Leonardo
 */
public class Cartas {

    private int valorCarta;
    private char naipe;
    private boolean eManilha;
    private boolean selecionada;

    public Cartas() {
        setCarta(-1,'x');
        setManilha(false);
    }

   public void setCarta(int v, char n){
       this.valorCarta = v;
       this.naipe = n;
   }

   public void getCarta(int v, char n){
       System.out.print(v+""+n);
   }

    public boolean isManilha() {
        return eManilha;
    }

    public void setManilha(boolean eManilha) {
        this.eManilha = eManilha;
    }

    public char getNaipe() {
        return naipe;
    }

    public void setNaipe(char naipe) {
        this.naipe = naipe;
    }

    public boolean isSelecionada() {
        return selecionada;
    }

    public void setSelecionada(boolean selecionada) {
        this.selecionada = selecionada;
    }

    public int getValorCarta() {
        return valorCarta;
    }

    public void setValorCarta(int valorCarta) {
        this.valorCarta = valorCarta;
    }
   
}
Baralho (a que da erro):
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Classes;

/**
 *
 * @author Leonardo
 */
public class Baralho {

    private Cartas[][] baralho;
    private Cartas vira;

    public Baralho() {
        baralho = new Cartas[4][10]; //inicia o baralho com 4 naipes e 10 valores
        // 0 - paus, 1 - copas, 2 - espada, 3 - ouros(pica)
        for (int naipe = 0; naipe < 4; naipe++) {
            for (int valores = 0; valores < 10; valores++) {
                char naip = setNaipe(naipe);
                baralho[naipe][valores].setCarta(naipe, naip);
            }
        }
    }

    private char setNaipe(int i) {
        char n = ' ';
        switch (i) {
            case 0:
                n = 'P';
                break;
            case 1:
                n = 'C';
                break;
            case 2:
                n = 'E';
                break;
            case 3:
                n = 'O';
                break;
        }
        return n;
    }

    public void geraVira() {
        char naipe = setNaipe((int) Math.random() * 4);
        int carta = (int) Math.random() * 10;

        vira.setCarta(carta, naipe);
        vira.setManilha(false);
        vira.setSelecionada(true);
    }
}

No caso, ele esta dando erro nessa linha : [color=green]baralho[naipe][valores].setCarta(naipe, naip); [/color]
Erro:
[color=red]Exception in thread "main" java.lang.NullPointerException
at Classes.Baralho.(Baralho.java:22)
at jogocarta.Main.main(Main.java:21)
Java Result: 1[/color]

Lembrando que na main apenas chamei Baralho b = new Baralho();

Mto obrigado !

7 Respostas

luxu

debuga pra ver onde tah o erro…

leonardo2204

Não, ta certo… é carta na vdd, so q eu pus o nome de baralho…

vlw pela ajuda de qlq jeito !

InSeOfKn
baralho[naipe][valores].setCarta(naipe, naip);

essa linha não teria que receber valores no primeiro parâmetro de setCarta?
ficando assim

baralho[naipe][valores].setCarta(valores, naip);

mas acredito que o NullPointerException não seja por esse motivo

leonardo2204

Bem observado amigo ! Mas como vc disse, o erro persiste :frowning: !

Obrigado !

barbon

Olá,

O problema é que o elemento do vetor baralho está null.

Acrescente a linha:

baralho[naipe][valores] = new Cartas();

O código ficaria assim:

public Baralho() {  
         baralho = new Cartas[4][10]; //inicia o baralho com 4 naipes e 10 valores  
         // 0 - paus, 1 - copas, 2 - espada, 3 - ouros(pica)  
         for (int naipe = 0; naipe < 4; naipe++) {  
             for (int valores = 0; valores < 10; valores++) {  
                 char naip = setNaipe(naipe);  
                 baralho[naipe][valores] = new Cartas();
                 baralho[naipe][valores].setCarta(naipe, naip);  
             }  
         }  
     }

Até mais.

leonardo2204

Não deu mais o erro, testarei mais tarde para ver se está rodando !

De qualquer jeito muito obrigado a todos !

leonardo2204

Realmente funcionou ! Muito obrigado a todos novamente pela ajuda !

P.S. Depois de ler um artigo aqui no GUJ decidi mudar minha matriz de bi pra unidimensional, para melhorar o desempenho !

Sempre aprendendo :smiley:

Criado 5 de janeiro de 2011
Ultima resposta 6 de jan. de 2011
Respostas 7
Participantes 4