1

我正在尝试创建一些 Card 对象并将其添加到包中。Card 对象的套装和等级具有枚举值,我真的试图避免必须创建 52 个唯一对象 - 一次一个。我想通过迭代类的 Rank 枚举(Suits 也是一个枚举)来分配排名,如下所示:

for (Card.Ranks r: Card.Ranks.values())
{
    theShoe.addItem(new Card(Card.Suits.Diamonds, Card.r.values()));
    theShoe.addItem(new Card(Card.Suits.Hearts, Card.r.values()));
    theShoe.addItem(new Card(Card.Suits.Spades, Card.r.values()));
    theShoe.addItem(new Card(Card.Suits.Clubs, Card.r.values()));
}

Card 构造函数如下所示:

public Card(Suits s, Ranks r)
{
    suit = s;
    rank = r;
}

但这绝对行不通。Eclipse 要求我在 Card 类中创建一个字段或常量“r”。:/我还有其他方法可以做到这一点吗?我尝试在每行末尾删除“.values()”,但这也不起作用。如果有人能帮助我理解我做错了什么以及我是否能以某种方式解决它,我将不胜感激。谢谢!

4

2 回答 2

2

根据您的构造函数,传递 aSuit和 a Rank。就像是,

for (Card.Ranks r : Card.Ranks.values()) {
    for (Card.Suit s : Card.Suit.values()) { // <-- also loop over the Suits
        theShoe.addItem(new Card(s, r));
    }
}

或者

for (Card.Suit s : Card.Suit.values()) { 
    for (Card.Ranks r : Card.Ranks.values()) {
        theShoe.addItem(new Card(s, r));
    }
}
于 2016-01-31T04:12:05.120 回答
1

您可以在枚举上调用 values() 方法。

for ((Card.Ranks r : Card.Ranks.values()) {
  // do what you want
}

这个 values() 方法由编译器隐式声明。所以它没有在 Enum 文档中列出。

于 2016-06-23T06:57:29.880 回答