我正在尝试使用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;
}
}
答案 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重置了套牌)。
交易稍微复杂一点。您必须执行以下操作:
dealer
)if(deck[randomNumber])
deck[randomNumber] = false
cardsInDeck
减少1 所以基本上你检查你的牌组至少有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");
}
}
}