我正在制作一个模拟纸牌游戏的程序。我有一个类 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;
}
在我的游戏类中,我有一个玩家手牌,由 Cards
的 List
表示:
public List<Card> playerHand = new ArrayList<Card>();
有没有一种方法可以根据我的枚举值
对玩家手牌进行排序?如果玩家的手牌是:
十,王牌,二,五
订购后将是:
二、五、十、ACE
我的条件是Ace
总是很高,而Suit
并不重要。我知道排序列表很简单,我只是不知道如何为基于 enum
Object
执行此操作
最佳答案
枚举具有默认顺序,即它们实现 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;
}
}
关于java - 对对象列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23136226/