0

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

1 に答える 1

1

クイックソリューション:

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

説明:

内部drawFromDeckでは、デッキを作成/更新してこれを返していますが、 に見られるように変数を更新していませんinitialDraw。これはそのような問題ではないかもしれません (オブジェクトは参照によって渡されますが、それに依存する前にテストしてください!)、 に渡しnullていると仮定しinitialDrawnulldrawFromDeck呼び出しに渡されているため、Deck毎回新しい が作成されます。

コードが機能する編集用

その場合、それが参照でdeckはなく実際のオブジェクトへの参照であることを確認しているため、毎回参照を渡すのではなく、呼び出しごとにオブジェクトへの参照を渡すことになります。nullDeckDeckdrawFromDecknull

于 2012-12-06T04:31:01.247 に答える