如何使用数组中使用的整数引用枚举



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

不幸的是,如果我必须通过名称引用每个enum值,即card[0] = new Card(Suit.Spade, Face.two, j, false); ,那么这将需要4*13if语句才能完成

我需要知道的是,是否有一种方法可以将每张卡的enum值设置为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++;
    }
}

使用隐式静态#values()方法。

Suit[] allSuits = Suit.values();
Face[] allFaces = Face.values();
// ...
card[i] = new Card(allSuits[j], allFaces[k], i, false);

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

int i = 0;
for (Suit s : Suit.values())
{
  for (Face f : Face.values())
  {
     card[i] = new Card(s, f, 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);
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新