【发布时间】:2015-02-05 16:20:36
【问题描述】:
在这个扑克游戏代码中,我试图创建一个Card 类。但是,我想使用enum 类型而不是使用constant,因为我听说它更好。唯一的问题是我多次尝试将suit 和faceValue 的实例值(它们是int 变量)分配给enum 类型变量,但它表示类型不兼容。怎么了?
public class Card {
final static int MAX_SUITS = 4;
final static int MAX_FACE_VALUES = 13;
private int suit;
private int faceValue;
enum Suit {HEARTS, DIAMONDS, SPADES, CLUBS}
enum Face {ACE, JACK, QUEEN, KING}
public Card(int suit, int faceValue) {
this.suit = suit;
this.faceValue = faceValue;
}
public int getSuit() {
if (suit == 0) {
return suit = Suit.HEARTS; break;
else if (suit == 1)
return suit = Suit.DIAMONDS; break;
else if (suit == 2)
return suit = Suit.SPADES; break;
else if (suit == 3)
return suit = Suit.CLUBS; break;
}
public int getFaceValue() {
if (faceValue == 1)
return faceValue = Face.ACE; break;
else if (faceValue == 11)
return faceValue = Face.JACK; break;
else if (faceValue == 12)
return faceValue = Face.QUEEN; break;
else if (faceValue == 13)
return faceValue = Face.KING; break;
}
public void setFaceValue(int faceValue) {
this.faceValue = faceValue;
}
public void setSuit(int suit) {
this.suit = suit;
}
@Override
public String toString() {
if (suit > MAX_SUITS || faceValue > MAX_FACE_VALUES)
return "invalid entry";
else if((suit < 0 || faceValue < 0))
return "invalid entry";
else
return faceValue + " of " + suit;
}
}
【问题讨论】:
-
您应该将构造函数从
public Card(int suit, int faceValue) {更改为public Card(Suit suit, Face faceValue) {... -
@assylias 我说过,将它分配给一个数字变量而不改变它的类型!我希望下次你努力更好地阅读问题,而不是争先恐后地回答和评估。
-
@askd 我读了你的问题。我的观点是:您应该尝试完全摆脱 int:使用枚举的整个想法是您不再需要使用 int 常量。如果您继续使用整数,那么您就没有使用枚举的全部功能。您可能需要在整数和枚举之间进行转换的唯一情况是,如果您从外部源接收整数,例如数据文件。在这种情况下,枚举和整数之间存在映射模式,例如通过向枚举添加一个 int 构造函数。