Cur*_*ico 10 java enums integer
我想一起定义字符串和整数,但它会给出错误.
public class Card {
Rank rank;
Suit suit;
public Card(Rank rank, Suit suit){
this.rank=rank;
this.suit=suit;
}
public enum Rank { Ace, 9, Queen, King } //and other suits
}
Run Code Online (Sandbox Code Playgroud)
该错误是令牌9上的语法错误,删除此令牌.
在Java中声明枚举时,{ Ace, 9, Queen, King }这些不是字符串和整数.这些是枚举的实际对象.
你可以这样做:
public enum Rank {
Ace(13),
Nine(8),
//etc
;
private int rank;
Rank(int rank) {
this.rank = rank;
}
public int getRank() {
return rank;
}
}
Run Code Online (Sandbox Code Playgroud)
里面的东西enums为标识符,即会产生静态最终(常量)对象的名称.因此,您不能使用int来命名对象.
enum允许您为每个条目放置字段:
public static enum Suit {HEART,DIAMOND,SPADE,CLUB}
public static enum Cards {
ACE_OF_HEART(Suit.HEART,14), QUEEN_OF_SPADE(Suit.SPADE,13) /* etc etc*/;
private final Suit mSuit;
private final int mRank;
private Cards(Suit suit, int rank) {
assert rank >= 2 && rank <= 14;
mSuit = suit;
mRank = rank;
}
public Suit getSuit() {
return mSuit;
}
public int getRank() {
return mRank;
}
}
Run Code Online (Sandbox Code Playgroud)
你真的不想用这种方式编码所有52张卡.你可以用另一种方式建模:
套房:
public static enum Suit { SPADE, HEART, DIAMOND, CLUB};
Run Code Online (Sandbox Code Playgroud)
具有一些流行等级的类作为命名常量:
public class Card{
public static final int ACE = 14;
public static final int QUEEN = 13;
public static final int KING = 12;
public static final int JACK = 11;
private final int mRank;
private final Suite mSuit;
public Card(Suite s, int r){
this.mSuit = s;
if(r < 2 || r > 14){
throw new IllegalArgumentException("No such card with rank: "+r);
}
this.mRank = r;
}
public Suit getSuit() {
return mSuit;
}
public int getRank() {
return mRank;
}
}
Run Code Online (Sandbox Code Playgroud)