我有以下枚举代表CardRank
public enum CardRank
{
DEUCE('2'), TREY('3'), FOUR('4'), FIVE('5'), SIX('6'), SEVEN('7'),
EIGHT('8'), NINE('9'), TEN('T'), JACK('J'), QUEEN('Q'), KING('K'),
ACE('A');
private char symbol;
private CardRank(char symbol)
{
this.symbol = symbol;
}
public char getSymbol()
{
return this.symbol;
}
}
CardRank
以升序表示。我需要比较排名才能知道哪个排名大于另一个排名。我可以使用>
运算符和数值,但不能使用char值。
// this will print out TRUE for all numerical values compared
// but FALSE for the chars
if (card.getRank().getSymbol() > anotherCard.getRank().getSymbol()) {
System.out.println("true");
} else {
System.out.println("false");
}
有什么想法吗?
答案 0 :(得分:15)
if (card.getRank().compareTo(anotherCard.getRank()) > 0)
是你需要的。
您可以使用序数:
if (card.getRank().ordinal() > anotherCard.getRank().ordinal())
枚举具有由它们的序数定义的自然顺序。枚举的序数是根据其在声明中的位置而归因的。所以DEUCE有序数0,TREY有序数1等等。
答案 1 :(得分:1)
考虑使用比较器。如果你愿意,它可以是一个公共的静态内部类:
import java.util.Comparator;
public enum CardRank implements Comparable<CardRank> {
DEUCE('2'), TREY('3'), FOUR('4'), FIVE('5'), SIX('6'), SEVEN('7'), EIGHT('8'), NINE(
'9'), TEN('T'), JACK('J'), QUEEN('Q'), KING('K'), ACE('A');
private char symbol;
private static CardRankComparator cardRankComparator = new CardRankComparator();
private CardRank(char symbol) {
this.symbol = symbol;
}
public char getSymbol() {
return this.symbol;
}
public int compareRank(CardRank otherCardRank) {
return cardRankComparator.compare(this, otherCardRank);
}
// public so that this can be used for sorting if need be
public static class CardRankComparator implements Comparator<CardRank> {
private static final String RANKS = "23456789TJQKA";
@Override
public int compare(CardRank cr1, CardRank cr2) {
int rank1 = RANKS.indexOf(String.valueOf(cr1.getSymbol()));
int rank2 = RANKS.indexOf(String.valueOf(cr2.getSymbol()));
return rank1 - rank2;
}
}
}