Question

I don't understand why I'm getting such output. The output tries to recreate and reshuffle cards every time I draw initial card, but why? Since I'm checking if deck of cards is empty or is null and if it is, it is being created.

Why wouldn't my code work?

Output:

#########    BLACK    ###    JACK    #########

deal, hit, stay, exit: deal

Creating deck...
Shuffling deck...

Drawing Player's card... A_♦
Creating deck...
Shuffling deck...

Drawing Dealer's card... X_X
Creating deck...
Shuffling deck...

Drawing Player's card... 6_♥
Creating deck...
Shuffling deck...

Drawing Dealer's card... X_X

Dealers Hand: A_♦ X_X = 11
Players Hand: 6_♥ A_♦ = 17

Initial Draw method:

private static Deck initialDraw(Deck deck, Hand player, Hand dealer)
{
    drawFromDeck(deck, player);
    drawFromDeck(deck, dealer);
    drawFromDeck(deck, player);
    drawFromDeck(deck, dealer);

    System.out.print("\n");

    showHands(player, dealer);
    compareHands(player, dealer);

    return deck;
}

I don't get this output when I use following code, how is it different? I'm still referencing the same array and passing it back, no ?

private static Deck initialDraw(Deck deck, Hand player, Hand dealer)
{
    deck = checkDeck(deck);

    drawFromDeck(deck, player);
    drawFromDeck(deck, dealer);
    drawFromDeck(deck, player);
    drawFromDeck(deck, dealer);

    System.out.print("\n");

    showHands(player, dealer);
    compareHands(player, dealer);

    return deck;
}
Was it helpful?

Solution

Quick solution:

private static Deck initialDraw(Deck deck, Hand player, Hand dealer)

    {
        deck = drawFromDeck(deck, player);
        deck = drawFromDeck(deck, dealer);
        deck = drawFromDeck(deck, player);
        deck = drawFromDeck(deck, dealer);

        System.out.print("\n");

        showHands(player, dealer);
        compareHands(player, dealer);

        return deck;
    }

Explanation:

Inside drawFromDeck you are creating/updating the deck and returning this, but not updating the variable as seen in initialDraw. This may not be such an issue (since Objects are passed by reference, but test before relying on it!), but I assume you are passing null into initialDraw, and so null is being passed to each drawFromDeck call, and so a new Deck is created each time.

For your Edit where you code works

In that case, you are ensuring that deck is not a null reference, but a reference to an actual Deck object, and so you will be passing a reference to a Deck object to each drawFromDeck call, rather than passing a null reference each time.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top