Java 如何在数组中使用整数引用枚举

Java 如何在数组中使用整数引用枚举,java,arrays,oop,enums,Java,Arrays,Oop,Enums,我正在尝试用卡片对象创建一副牌。此卡片对象有两个枚举,一个int和一个boolean,如下所示。为了创建这副牌,我需要循环浏览西装和面值 不幸的是,如果我必须通过名称引用每个枚举值,这将需要4*13 if语句来完成,即card[0]=new CardSuit.Spade,Face.two,j,false 我需要知道的是,是否有一种方法可以将每张卡的枚举值设置为Suit.Spade,而不是Suit.int,这样下面的语句就可以在没有52条if语句的情况下工作。我只是简单地数牌,而Suit.j,Fa

我正在尝试用卡片对象创建一副牌。此卡片对象有两个枚举,一个int和一个boolean,如下所示。为了创建这副牌,我需要循环浏览西装和面值

不幸的是,如果我必须通过名称引用每个枚举值,这将需要4*13 if语句来完成,即card[0]=new CardSuit.Spade,Face.two,j,false

我需要知道的是,是否有一种方法可以将每张卡的枚举值设置为Suit.Spade,而不是Suit.int,这样下面的语句就可以在没有52条if语句的情况下工作。我只是简单地数牌,而Suit.j,Face.k就是我要找的一个例子

    int i = 0;
    int j = 1;
    int k = 1;


    while(j <= suitCount)
    {
        k = 0;
        while(k <= faceCount)
        {
            card[i] = new Card(Suit.j, Face.k, i, false);

            k++;
            i++;
        }
        j++;
    }
使用隐式静态值方法

使用隐式静态值方法

尝试以下方法:

int i = 0;
List<Card> cards = new ArrayList<>(Suit.values().length * Face.values().length);
for (Suit suit : Suit.values()){
    for (Face face : Face.values()){
        cards.add(new Card(suit, face, i, false));
        i++;
    }
}
尝试以下方法:

int i = 0;
List<Card> cards = new ArrayList<>(Suit.values().length * Face.values().length);
for (Suit suit : Suit.values()){
    for (Face face : Face.values()){
        cards.add(new Card(suit, face, i, false));
        i++;
    }
}
也许吧


也许

与puce的答案基本相同,但由于我花了时间把它全部打出来

package com.example.cards;

public class Card
{
    private Suit suit;
    private Rank rank;

    public Card(Suit suit, Rank rank)
    {
        this.suit = suit;
        this.rank = rank;
    }

    public enum Suit {
        SPADE, HEART, CLUB, DIAMOND;
    }

    public enum Rank {
        ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN,
        EIGHT, NINE, TEN, JACK, QUEEN, KING
    }

    /* Test building a deck of cards */
    public static void main(String[] args)
    {
        Card[] deck = new Card[52];
        int i = 0;

        for (Suit suit : Suit.values()) {
            for (Rank rank : Rank.values()) {
                deck[i++] = new Card(suit, rank);
            }
        }
    }
}

基本上与puce的答案相同,但由于我花了时间将其全部打印出来

package com.example.cards;

public class Card
{
    private Suit suit;
    private Rank rank;

    public Card(Suit suit, Rank rank)
    {
        this.suit = suit;
        this.rank = rank;
    }

    public enum Suit {
        SPADE, HEART, CLUB, DIAMOND;
    }

    public enum Rank {
        ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN,
        EIGHT, NINE, TEN, JACK, QUEEN, KING
    }

    /* Test building a deck of cards */
    public static void main(String[] args)
    {
        Card[] deck = new Card[52];
        int i = 0;

        for (Suit suit : Suit.values()) {
            for (Rank rank : Rank.values()) {
                deck[i++] = new Card(suit, rank);
            }
        }
    }
}

这是正确的,但您应该只在循环外检索一次值,并将它们保存在套装[]和面部[]中。@JohnWatts这就是//。。。意思是暗示。这是正确的,但您应该在循环外检索一次值,并将它们保存在一套衣服[]和一张脸[]中。@JohnWatts这就是//。。。意思是暗示。甚至比我的回答更好+1卡片。添加新卡片套装,正面,i++,假+1@StephenP是的,我知道你可以内联I++,但有时人们为了可读性更喜欢在单独的一行中。所以我遵循OP提供的风格。甚至比我的答案更好+1卡片。添加新卡片套装,正面,i++,假+1@StephenP是的,我知道你可以内联I++,但有时人们为了可读性更喜欢在单独的一行中。所以我遵循OP提供的风格。