通过遍历枚举来分配参数

Assigning Param by Iterating Through Enum

我正在尝试创建一些 Card 对象并将其添加到包中。 Card 对象的花色和等级有枚举值,我真的在努力避免创建 52 个独特的对象——一次一个。我想通过遍历 class 的 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()));
}

卡片构造函数如下所示:

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

但肯定不行。 Eclipse 要求我在卡片 class 中创建一个字段或常量 "r"。 :/我还有另一种方法吗? 我试过删除每行末尾的“.values()”,但这也不起作用。如果有人能帮助我理解我做错了什么并且我能以某种方式解决它,我将不胜感激。谢谢!

根据您的构造函数,传递 SuitRank。像,

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

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

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

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