我对输出感到困惑,因为它不会让我重新创建对象
我试图解决一个问题,我尝试在绘制所有卡片后重置我的卡片组。当我到达甲板的末端时,我确实应该得到消息Deck is empty! You must recreate and reshuffle deck of cards!
,但一旦甲板被重新创建并重新洗牌,它仍会不断显示此消息。我对输出感到困惑,因为它不会让我重新创建对象
因此,我将Card对象传递给Deck类,其中以堆栈方式存储在数组中。
为什么我得到这样的输出,我确实重置了一副牌?
deal, bet, hit, stay, split, leave: deal
Drawing Player's card... 9 ♥
Drawing Dealer's card... A ♣
Drawing Player's card... 7 ♦
Drawing Dealer's card... K ♦
Dealers Hand: K_♦ A_♣ = 21
Players Hand: 7_♦ 9_♥ = 16
Dealer has BLACKJACK!
deal, bet, hit, stay, split, leave: deal
Deck is empty! You must recreate and reshuffle deck of cards!
Creating deck...
Shuffling deck...
Drawing Player's card... 7 ♥
Drawing Dealer's card... 5 ♥
Drawing Player's card... K ♠
Drawing Dealer's card... 6 ♦
Dealers Hand: 6_♦ 5_♥ = 11
Players Hand: K_♠ 7_♥ = 17
deal, bet, hit, stay, split, leave: deal
Deck is empty! You must recreate and reshuffle deck of cards!
Creating deck...
Shuffling deck...
Drawing Player's card... Q ♦
Drawing Dealer's card... 9 ♥
Drawing Player's card... 8 ♥
Drawing Dealer's card... 10 ♠
Dealers Hand: 10_♠ 9_♥ = 19
Players Hand: 8_♥ Q_♦ = 18
deal, bet, hit, stay, split, leave: deal
Deck is empty! You must recreate and reshuffle deck of cards!
Creating deck...
Shuffling deck...
Drawing Player's card... 3 ♣
Drawing Dealer's card... 6 ♠
Drawing Player's card... 4 ♠
Drawing Dealer's card... K ♠
Dealers Hand: K_♠ 6_♠ = 16
Players Hand: 4_♠ 3_♣ = 7
deal, bet, hit, stay, split, leave:
这是我如何重置我的扑克牌:
private static Deck createDeck(Deck deck)
{
System.out.println("Creating deck...");
deck = new Deck(DECKSIZE);
deck.createDeck();
System.out.println("Shuffling deck...");
deck.shuffleDeck();
return deck;
}
这是我如何检查,如果甲板为空:
private static Deck checkDeck(Deck deck)
{
if(deck == null)
return createDeck(deck);
if(deck.isEmpty())
{
deck = new Deck(DECKSIZE);
System.out.print("Deck is empty! You must recreate and reshuffle deck of cards!\n");
return createDeck(deck);
}
else
return deck;
}
我检查之前每次甲板我画一张卡片:
public static void drawFromDeck(Deck deck, Hand hand)
{
deck = checkDeck(deck);
Card temp = new Card(deck.pop());
System.out.println("Drawing " + hand.getName() + "'s card... " + temp.toString());
hand.insert(temp);
System.out.print("\n");
}
initialDraw()
private static void 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);
}
有几个作用域问题(在甲板变量)。
总之,这是错误的类型:用于获取代码工作,但是,你可以提高你的代码
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;
我建议这些变化(WRT http://ideone.com/S4Yv3l)。
i)更改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;
}
ⅱ) 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;
}
ⅲ) 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;
}
ⅳ)在主:
deck = initialDraw(deck, playersHand, dealersHand);
我建议只对一组事物进行更改,您可以使用相同的原则来组织其他功能。
你修好了!感谢:D – HelpNeeder
if(deck == null)
return createDeck(deck);
else if(deck.isEmpty())
{
deck = new Deck(DECKSIZE);
System.out.print("Deck is empty! You must recreate and reshuffle deck of cards!\n");
return createDeck(deck);
}
else
return deck;
}
试试这个
这没有帮助。当我的牌组空时,我仍然得到相同的输出。 – HelpNeeder
@Marian没有POC在'return'语句后执行。所以,“其他”是多余的。 –
@ TJ.you是对的。对不起,我错了。 –
你可以显示一段调用checkdeck()的代码吗? –
为什么从createDeck()调用'deck.createDeck();'?这是一个递归调用,没有基本情况。这不是无限递归吗? –
@HelpNeeder这是checkDeck()的定义,我想看看使用/调用它的那段代码。 –