方案:
我想要一个包含标准牌组中所有扑克牌的枚举。对于这个例子,忽略这些笑话。
书写
enum Cards {
SPADE_1(0, 1),
SPADE_2(0, 2),
etc.
感觉不对。
我希望能够做这样的事情
enum Card {
for (int suit=0; suit<4; suit++) {
for (int face=1; face<13; face++) {
new Card(suit, face);
}
}
}
我考虑将卡片定义为包含西装和脸部领域的类别,其中西装和脸部本身就是枚举。然而,在其他场景中(例如红色和黑色套装的笑话),这将允许创建无效的卡片对象(即钻石小丑或红色10)。
自答案:
显然我没有足够的代表来回答我自己的问题。
I'm not sure if it's considered good form to answer my own question, but @Paul just gave me a brainwave. Declare Card to have a private constructor, and use a static Card getCard(suit, face) method to validate combinations before returning them.
答案 0 :(得分:1)
我不认为可以使用enum
完成,但我们可以implement
class
作为enum
。你可以做类似下面的事情。
<强>实现:强>
public class Card {
private int suit;
private int face;
private Card(int suit, int face){
this.suit = suit;
this.face = face;
}
public int getSuit(){
return this.suit;
}
public int getFace(){
return this.face;
}
public static Card[] cards = new Card[52];
static{
int counter =0;
for (int i=0; i<4; i++) {
for (int j=0; j<13; j++) {
cards[counter] = new Card(i, j);
counter++;
}
}
}
}
修改强>
设置卡的counter
。之前它会为索引超过15而抛出NullPointerException
。
<强> USAGES:强>
System.out.println("face of the card:"+Card.cards[10].getFace());
System.out.println("suit of the card:"+Card.cards[10].getSuit());
<强>输出:强>
face of the card:7
suit of the card:3
答案 1 :(得分:0)
我想说两个枚举:每张脸一张,每张卡另一张。因此,在Card Enum中,每个枚举都有两个属性:卡的数量(如果你不觉得为此目的使用普通数字,你可以制作另一个枚举),面部是面部枚举的实例。这应该可以解决问题。
答案 2 :(得分:0)
我使用enum来获得排名,套装和卡片,它们看起来效果相当不错。请参阅此代码的答案:Java: Enum or encoding with numbers?