1

カード オブジェクトからデッキを作成しようとしています。このカード オブジェクトには、次のようenumsに int と a の2 つがありbooleanます。このデッキを作成するには、スーツと額面の値を循環させる必要があります。

enum残念ながら、各値をその名前で参照する必要がある場合、これを達成するには 4*13 の if ステートメントが必要になります。card[0] = new Card(Suit.Spade, Face.two, j, false);

私が知る必要があるのはenum、以下が 52 の if ステートメントなしで機能するように、Suit.Spade ではなく、suit.int のようなもので各カードの値を設定する方法があるかどうかです。i は単にカードを数える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++;
    }
4

4 に答える 4

5

次のようなものを試してください:

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++;
    }
}
于 2013-01-11T22:41:57.943 に答える
3

暗黙的な静的#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

于 2013-01-11T22:39:09.377 に答える
1
int i = 0;
for (Suit s : Suit.values())
{
  for (Face f : Face.values())
  {
     card[i] = new Card(s, f, i, false);
     i++;
  }
}

多分

于 2013-01-11T22:44:13.363 に答える
1

基本的に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);
            }
        }
    }
}
于 2013-01-11T22:52:38.557 に答える