There are a couple of scoping issue (for the Deck variable).
To summarize, this is the type of mistake:
void createObj(MyObject objt)
{
objt = new MyObject(); //Local Scope
}
//Caller
MyObject obj = null;
createObj(obj); // <-- New object will be created only within the function, obj will remain unaffected.
// obj is still null;
I suggest these changes (wrt http://ideone.com/S4Yv3l) for getting the code to work, however, you can improve your code.
i) Change the signature of createDeck.
private static Deck createDeck()
{
System.out.println("Creating deck...");
Deck deck = new Deck(DECKSIZE);
deck.createDeck();
System.out.println("Shuffling deck...");
deck.shuffleDeck();
return deck;
}
ii) CheckDeck
private static Deck checkDeck(Deck deck)
{
if(deck == null)
return createDeck();
if(deck.isEmpty())
{
System.out.print("Deck is empty! You must recreate and reshuffle deck of cards!\n");
return createDeck();
}
return deck;
}
iii) InitialDraw
private static Deck initialDraw(Deck deck, Hand player, Hand dealer)
{
deck = checkDeck(deck);
drawFromDeck(deck, player); // drawing players card
deck = checkDeck(deck);
drawFromDeck(deck, dealer); // drawing dealers card
deck = checkDeck(deck);
drawFromDeck(deck, player); // drawing players card
deck = checkDeck(deck);
drawFromDeck(deck, dealer); // drawing dealers card
System.out.print("Dealers Hand:");
dealer.displayHand();
System.out.print(" = " + dealer.getHandTotal() + "\n");
System.out.print("Players Hand:");
player.displayHand();
System.out.print(" = " + player.getHandTotal() + "\n");
checkInitialDraw(player, dealer);
return deck;
}
iv) In Main :
deck = initialDraw(deck, playersHand, dealersHand);
I have suggested changes only for one set of things, you can use the same principle to organize the other functions.