我希望编写一个可以返回2张卡值差异的方法。 我很困惑,因为我正在学习枚举,并且不确定实施它的最有效方法。
public class Card implements Comparable<Card> {
public enum Rank {TWO, THREE, FOUR, FIVE, SIX,SEVEN, EIGHT, NINE, TEN,
JACK, QUEEN, KING, ACE}
public enum Suit {CLUBS, DIAMONDS, HEARTS, SPADES}
public static int difference(Card c){
}
任何帮助或指导都将不胜感激。
答案 0 :(得分:4)
public enum Rank {ACE(1), TWO(2); /* obviously add the other values*/
private int value ;
Rank(int value){
this.value = value;
};
public int getValue(){
return this.value;
}
public int calcDifference(Rank rank){
return getValue() - rank.getValue();
}
};
然后可以这样调用:
Rank rankAce = Rank.ACE;
System.out.println(rankAce.calcDifference(Rank.TWO));
你可以删除int值并只使用序数,但这种方式会给你一点灵活性。
答案 1 :(得分:1)
定义卡片价值的最简单方法是将套装的十三倍加入等级,或者将等级增加四倍:
public int faceValue(Card c) {
return 13*c.getSuit().ordinal()+c.getRank().ordinal();
}
或
public int faceValue(Card c) {
return 4*c.getRank().ordinal()+c.getSuit().ordinal();
}
这两种方式都会产生从0
到51
的数字,包括在内。
手持faceValue
,您可以按如下方式定义差异函数:
public static int faceValueDifference(Card left, Card right){
return left.faceValue()-right.faceValue();
}