我正在尝试用卡片对象创建一个牌组。此卡片对象有两个enums
,一个int和一个boolean
,如下所示。为了创建这个套牌,我需要循环穿着套装和面值。
不幸的是,如果必须按名称引用每个enum
值,则需要4 * 13 if语句,即card[0] = new Card(Suit.Spade, Face.two, j, false);
我需要知道的是,是否有办法将每张卡设置为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++;
}
答案 0 :(得分: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++;
}
}
答案 1 :(得分: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
答案 2 :(得分:1)
int i = 0;
for (Suit s : Suit.values())
{
for (Face f : Face.values())
{
card[i] = new Card(s, f, i, false);
i++;
}
}
也许
答案 3 :(得分: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);
}
}
}
}