差异方法java使用枚举类型

时间:2012-11-07 15:24:38

标签: java enums

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

}

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

2 个答案:

答案 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();
}

这两种方式都会产生从051的数字,包括在内。

手持faceValue,您可以按如下方式定义差异函数:

public static int faceValueDifference(Card left, Card right){
    return left.faceValue()-right.faceValue();
}