卡片组使用ENUM和布尔阵列来创建卡片组。 Java的

时间:2012-05-15 01:39:19

标签: java

  

可能重复:
  how to create a deck of cards constructor

我正在尝试使用enums创建“卡片组”。我已经宣布了我的枚举,但我仍然坚持如何使用布尔数组创建卡片组。

到目前为止,我尝试初始化我的构造函数,但我不知道现在要采取什么方向。任何帮助将不胜感激。

package Cards;

//Class to represent a standard Deck of 52 Playing-Cards
//  The following functionality is provided
//      Default Constructor - creates a complete deck of cards
//      shuffle() - collects all 52 cards into the deck
//      deal() - returns a randomly selected card from the deck
//
import java.util.Random;

public class DeckOfCards {
    public static final int DECK_SIZE = 52;

    // Instance Variables
    private boolean[] deck; // An implicit set of 52 Playing-Cards
    private int cardsInDeck;// Number of cards currently in the deck
    private Random dealer; // Used to randomly select a card to be dealt

    // Constructor
    public DeckOfCards() {

        deck = new boolean[DECK_SIZE];
        for (PlayingCard.CardSuit suit : PlayingCard.CardSuit.values())
            for (PlayingCard.CardRank rank : PlayingCard.CardRank.values())
                deck[cardsInDeck++] = true;

    }

    // Collect all 52 Playing-Cards into the deck
    public void shuffle() {

    }

    // Simulate dealing a randomly selected card from the deck
    // Dealing from an empty deck results in a RuntimeException
    public PlayingCard deal() {

        return null;
    }
}

2 个答案:

答案 0 :(得分:2)

我的猜测是实现shuffle()和deal()。

从顶部的评论判断,我假设所有shuffle必须做的是将每张卡设置为true(循环遍历布尔值并将它们全部设置为true)。

Deal()说它会随机选择一张卡片,所以你应该找到一种方法来选择一张随机卡片(一张仍然是真的,如在尚未处理的卡片中),然后处理该卡片,以及设置它是假的,所以直到牌组被洗牌才能再次处理。

这将是我如何使用您当前的代码并阅读评论希望您做的事情。

答案 1 :(得分:2)

我认为你不理解你的布尔数组。您目前拥有一个包含52个真实数组的数组:[true, true, true, true, ..., true]这就是您deck当前的全部内容。据我了解你的代码,数组只是按位置代表一副牌。 deck中的元素0指的是黑桃王牌,而deck中的元素51指的是心之王。

然后,阵列中的每个位置都会引用卡片当前是否在牌组中。

if(deck[0]) {
    System.out.println("This deck currently has an Ace of Spades");
}
if(!deck[51]) {
    System.out.println("This deck currently does not have a King of Hearts");
}

随机播放将每张卡片放入卡片组中,因此只需将每张卡片设置为true即可。 (你已经在构造函数中执行了这个操作,可能的shuffle重置了套牌)。

交易稍微复杂一点。您必须执行以下操作:

  1. 检查cardsInDeck> 0
  2. 选择0到51的随机数(使用dealer
  3. 如果错误选择新号码,请检查if(deck[randomNumber])
  4. 设置deck[randomNumber] = false
  5. cardsInDeck减少1
  6. 所以基本上你检查你的牌组至少有1张牌可以处理。然后你从牌组中挑选一张随机牌。如果您的套牌中不存在该卡,则选择一张新卡。然后你告诉你的牌组你已经删除了那张牌。最后告诉牌组卡总数少了1个。

    编辑: 如何输出现有的套牌:

    int card = 0;
    System.out.println("The deck contains the following: \n");
    for(PlayingCard.CardSuit suit : PlayingCard.CardSuit.values()) {
        for(PlayingCard.CardRank rank : PlayingCard.CardRank.values()) {
            if(deck[ card++ ]) {
                System.out.println(rank + " of " + suit + "\n");
            }
         }
    }