mardi 2 juin 2015

Debugging Blackjack program? (Java)

I am trying to write a Blackjack program where the user bets against a CPU dealer. The problem I am having is that I have written classes for card, deck, and dealer, but when I try to initialize a new dealer and a new deck I get the error:

Exception in thread "main" java.lang.NullPointerException
at Blackjack.Deck.<init>(Deck.java:12)
at Blackjack.Blackjack.main(Blackjack.java:10)

Here is my class for card:

class Card {
private int rank;
private int suit;
private int value;
private static String[] ranks = {"Joker","Ace","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King"};
private static String[] suits = {"Clubs","Diamonds","Hearts","Spades"};
Card(int suit, int values)
{
    this.rank=values;
    this.suit=suit;
    if(rank>10)
    {
        value=10;
    }
    else
        value=rank;
}
public String toString()
{
    return ranks[rank]+" of "+suits[suit];
}
public int getRank()
{
    return rank;
}
public int getSuit()
{
    return suit;
}
public int getValue()
{
    return value;
}
public void setValue(int set)
{
    value = set;
}

my class for deck:

package Blackjack;
import java.util.ArrayList;
import java.util.Random;
class Deck {
private ArrayList<Card> deck;
Deck()
{
    for(int i=0; i<4; i++)
    {
        for(int j=1; j<=13; j++)
        {
            deck.add(new Card(i,j));
        }
    }
}
public void shuffle()
{
    Random random = new Random();
    Card temp;
    for(int i=0; i<200; i++)
    {
        int index1 = random.nextInt(deck.size()-1);
        int index2 = random.nextInt(deck.size()-1);
        temp = deck.get(index2);
        deck.set(index2, deck.get(index1));
        deck.set(index1, temp);
    }
}
public Card drawCard()
{
    return deck.remove(0);
}

}

my constructor for dealer:

Dealer(Deck deck)
{
    for(int i=0; i<2; i++)
    {
        hand.add(deck.drawCard());
    }
    aHand = hand.toArray(aHand);
    for(int i=0; i<aHand.length; i++)
    {
        handvalue += aHand[i].getValue();
        if(aHand[i].getValue()==1 && handvalue<12)
        {
            handvalue=handvalue+10;
        }
    }
}

And my main method:

public class Blackjack {
private static int cash;
public static void main(String[] args){
    System.out.println("Hi! What is your name?");
    Scanner scan = new Scanner(System.in);
    String name = scan.nextLine();
    System.out.println("Hello, "+name+" lets plays some BlackJack!");
    Deck deck = new Deck();
    deck.shuffle();
    Dealer dealer = new Dealer(deck);
}

}

Any help would be VERY much appreciated. Thanks!

Aucun commentaire:

Enregistrer un commentaire