1

我希望编写一个可以返回 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){

}

任何帮助或指导将不胜感激。

4

2 回答 2

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 值并仅使用序数,但这种方式为您提供了一些灵活性。

于 2012-11-07T15:29:26.307 回答
1

定义一张牌的价值最简单的方法是在花色上加上 13 倍的花色,或者在花色上加上 4 倍的花色:

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,包括 。

有了faceValuein hand,你可以定义差分函数如下:

public static int faceValueDifference(Card left, Card right){
    return left.faceValue()-right.faceValue();
}
于 2012-11-07T15:31:47.947 回答