我正在制作一个模拟纸牌游戏的程序.我有一个Card代表扑克牌的课程:
//suit types
public enum Suits{
SPADES,
CLUBS,
HEARTS,
DIAMONDS
}
//value types
public enum Values{
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING,
ACE,
}
private Suits suit;
private Values value;
//Card constructor
public Card(Values value, Suits suit){
this.value = value;
this.suit = suit;
}
Run Code Online (Sandbox Code Playgroud)
在我的游戏课中,我有一个由以下List人员代表的玩家手Cards:
public List<Card> playerHand = new ArrayList<Card>();
Run Code Online (Sandbox Code Playgroud)
有没有办法可以通过我的枚举对玩家进行排序Values?意味着如果球员的手是:
十,ACE,两个,五个
订购后会是:
两个,五个,十个,ACE
我的条件Ace总是很高,Suit并不重要.我知道订购列表是微不足道的我只是不知道如何做一个Object基于enum
枚举有默认排序,即它们实现Comparable,因此您只需对枚举列表进行排序或调用ACE.compareTo( TEN )一些枚举Comparator.需要注意的是枚举值的顺序是在枚举类定义的顺序(基于序,见下段),即你的情况TWO< THREE< FOUR等.
另外,枚举具有序数,即定义内的枚举值的索引.在你的情况下TWO会有序数0,THREE序数1等.
为了对你的卡进行排序,你可以使用这样的Comparator(或工具Comparable<Card>):
class CardComparator implements Comparator<Card> {
public int compare( Card lhs, Card rhs) {
//suit would be relevant otherwise you'd end up with spades 10, hearts 10, spades jack etc.
//thus sort by suit first to keep the cards of a suit together
int r = lhs.suit.compareTo( rhs.suit );
if( r == 0) { //same suit
r = lhs.value.compareTo( rhs.value );
}
return r;
}
}
Run Code Online (Sandbox Code Playgroud)