【发布时间】:2021-11-12 15:50:25
【问题描述】:
我有以下表示 CardRank 的枚举,按降序排列。
public enum Position
{
ACE('A'), KING('K'), QUEEN('Q'), JACK('J'),
TEN('T'), NINE('9'), EIGHT('8'), SEVEN('7'),
SIX('6'), FIVE('5'), FOUR('4'), TREY('3'), DEUCE('2');
private char symbol;
private Position(char symbol)
{
this.symbol = symbol;
}
public char getSymbol()
{
return this.symbol;
}
}
我需要比较给方法的参数和分配给每个枚举元素的值。当给定的卡片参数具有较低的等级时,该方法应该返回false,并且当给定的参数具有相同或更高的等级时,它应该返回true。
测试让这个问题更清楚。
@Test
void testOrder() {
position = Position.TEN;
assertFalse(position.isPreceding(Position.ACE));
assertFalse(position.isPreceding(Position.KING));
assertFalse(position.isPreceding(Position.QUEEN));
assertTrue(position.isPreceding(Position.NINE));
position = Position.TREY;
assertFalse(position.isPreceding(Position.FOUR));
assertFalse(position.isPreceding(Position.FIVE));
assertFalse(position.isPreceding(Position.SIX));
assertTrue(position.isPreceding(Position.DEUCE));
position = Position.KING;
assertTrue(position.isPreceding(Position.QUEEN));
assertTrue(position.isPreceding(Position.NINE));
assertTrue(position.isPreceding(Position.DEUCE));
}
我发现 compareTo() 或 ordinal() 方法似乎是可行的方法,但我无法将 String 参数转换为数字。
这是我最近的尝试:
public boolean isOrdered (Position position) {
for (Position p : values()) {
if (position.compareTo(p) >=0)
return true;
}
return false;
}
设法解决它。
【问题讨论】:
-
你是对的,对不起。我调整了这个问题,以便更容易理解/解释,但我忘记了 CardRank(现在保留到位置)。