使用2个不同的ENUMS在Java中构建一副纸牌
我有一个上课的实验室(我们可以寻求外部帮助)来制作克朗代克单人纸牌。在编程方面,我是个菜鸟(这是我有史以来第一次上编程课)。我们刚刚了解了枚举,我必须使用它们来构建一个平台(我已经查看了有关此问题的其他问题,但是我还没有找到符合我需要的解决方案)。我们有两个枚举(等级和级别):
public enum Rank {ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING;}
和
public enum Suit { CLUBS,
SPADES,
HEARTS,
DIAMONDS;}
现在,我需要将它们组合到一个名为Deck的数组中,其形式如下:
public Deck() { cards = new Card[52];
}
为了将卡片放入卡座,我一直在尝试使用“ .values”,但我做对了。这个实验室有一个测试代码,它说我没有得到任何要点。我究竟做错了什么?
public void fill() { for (int i = 0; i<52;i++){
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(r,s);
}
}
}
}
任何帮助深表感谢。谢谢!
回答:
你说
现在,我需要将它们组合到一个名为Deck的数组中,其形式如下:
不,您需要创建一个类Card,其中每个枚举都有一个字段。只有这样做之后,您才能创建卡片组。这样做-
创建一个Card类,至少给它两个字段,每个枚举一个,再加上一个适当的构造函数,再加上getters,再加上一个像样的东西toString()
,然后就可以开始了。
另外,这是错误的:
public void fill() { for (int i = 0; i<52;i++){ // get rid of this loop
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(r,s);
}
上面的代码将尝试将52张卡塞入每个索引位置。例如,它将尝试将所有52张卡塞入cards [0]点,与cards
[1]项相同,仅添加最后一张Card。您将拥有52个钻石之王的阵列-这不是您想要的。
取而代之的是,摆脱外部循环,而在循环内部增加i:
public void fill() { int i = 0;
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(r,s);
i++; // increment i here
}
}
}
以上是 使用2个不同的ENUMS在Java中构建一副纸牌 的全部内容, 来源链接: utcz.com/qa/415223.html