如何让topIndex持有52张卡?

时间:2015-12-11 02:04:12

标签: java blackjack

所以这是一个名为BackJAck的游戏,当它要求getCard时,我的topIndex为零,所以它试图获得一张卡但是没有卡可以得到。我需要它从52开始。任何人都可以帮助我吗?

public class Deck {

public static final int NUM_FACES = 13;
public static final int NUM_SUITS = 4;
public static final int NUM_CARDS = NUM_FACES * NUM_SUITS;

public static final String[] SUITS = { "Clubs", "Spades", "Diamonds", "Hearts" };

private AbstractCard[] deck;

private int topIndex=0;


public Deck() {
    // Instantiate deck and fill it with cards. 
    deck = new AbstractCard[52];
    int cnt = 0;
    AbstractCard[] card = new AbstractCard[0];
    for ( int v = 1; v <= NUM_FACES; v++) {
        for ( int u = 0; u < NUM_SUITS; u++) {
            deck[cnt] = new BlackJackCard(v , SUITS[u]   );
            cnt++;
        }



    }


}

public void shuffle() {
    topIndex=0;
   for( int i = 0 ; i < 100; i++ ){
       int x = (int) Math.random()*51; 
       int y= (int) Math.random() *51;
       if ( x != y ){
           AbstractCard card1 = deck[x];
       deck[x] = deck[y];
       deck[y] = card1;
       }
   }



}

public AbstractCard getCard() {
    return deck[topIndex++];
}

public int cardsLeft() {
    return 52 - topIndex; 
}

public boolean hasCards() {
    return topIndex<51;
}

}

1 个答案:

答案 0 :(得分:1)

很难说,因为您没有向我们提供您的卡类或任何示例调用Deck类(即 您正在使用Deck)。

我假设BlackJackCard延伸AbstractCard,只存储卡片价值并适合。

我自己创建了一个简单的BlackJackCard类,看起来您的Deck构造函数会使用BlackJackCard填充您的deck数组。

getCard()将从牌组阵列返回BlackJackCard,然后递增topIndex

运行类似

的内容
Deck deck = new Deck();
deck.shuffle();
for (int i = 0; i < 5; i++) {
    System.out.println(deck.getCard().toString());
}

应该给出与此类似的结果(格式等可能会有所不同):

(Diamonds, 11)
(Clubs, 2)
(Diamonds, 3)
(Hearts, 1)
(Diamonds, 2)

如果您想从卡片52而不是卡片0开始,我想您可以将topIndex更改为52并在getCard() 内部递减,而不是递增。您还需要更改cardsLeft()hasCards()的逻辑。

所以看起来Deck会创建卡片。看起来getCard()会从你的“套牌”中返回一张牌。如果要从卡52而不是0开始,可以更改方法逻辑。但是如果你的问题是你没有从Deck获得任何卡片 - 你需要提供有关你正在使用{/ 1>}的信息的信息。

我也注意到了其他一些事情。

Deck将始终返回0. (int) Math.random()*51强制转换首先应用于(int),这将导致0.因此,您的Math.random()方法实际上不会随机播放任何内容。 您可能意味着shuffle()将随机多个,然后转换为int。

您在整个代码中使用51/52。您定义(int) (Math.random() * 51),可能很好用它而不是在值中进行硬编码。

构造函数中的NUM_CARDS未使用。