Странный вывод при проверке моей колоды карт перед каждой карточкой

91
8

Я не понимаю, почему я получаю такой вывод. Результат пытается воссоздать и перетаскивать карты каждый раз, когда я рисую исходную карту, но почему? Поскольку я проверяю, что колода карт пуста или имеет значение null, и если да, она создается.

Почему мой код не работает?

Вывод:

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

deal, hit, stay, exit: deal

Creating deck...
Shuffling deck...

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

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

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

Drawing Dealer card... X_X

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

Метод Initial Draw:

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

Я не получаю этот вывод, когда использую следующий код, как он отличается? Я все еще ссылаюсь на тот же массив и передаю его обратно, нет?

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

спросил(а) 2021-01-19T15:21:14+03:00 9 месяцев, 1 неделя назад
1
Решение
66

Быстрое решение:

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 в initialDraw, и поэтому null передается каждому вызову drawFromDeck, и поэтому новая Deck создается каждый раз.

Для вашего редактирования, где работает код

В этом случае вы гарантируете, что deck не является null ссылкой, а ссылкой на фактический объект Deck, и поэтому вы будете передавать ссылку на объект Deck на каждый вызов drawFromDeck, а не передавать null ссылку каждый раз.

ответил(а) 2021-01-19T15:21:14+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема