使用2个不同的ENUMS在java中构建一副牌

时间:2014-04-27 21:19:43

标签: java enums

我有一个实验课(我们被允许寻求外界帮助)创建克朗代克纸牌。在编程时我是一个完全的菜鸟(这是我的第一个编程课程)。我们刚刚学习了枚举,我必须使用它们构建一个套牌(我已经回顾了其他有关此问题的问题,但我还没有找到符合我需要的解决方案)。我们有两个枚举(排名和西装):

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);
   }
   }
   }
   } 

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

你说,

  

现在,我需要将它们组合成一个名为Deck的数组,它就是这样的:

不,您需要创建一个类卡,其中每个枚举都有一个字段。只有在这样做之后才能创建卡片组。所以这样做 - 创建一个Card类,给它至少两个字段,每个枚举一个,加上一个适当的构造函数,加上getter,加上一个体面的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张卡片放入卡片[0]中,同样适用于卡片[1]项目,并且只会添加最后一张卡片。你将拥有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
    }
  }
}
相关问题