java - 将 ENUM 中的数值与参数进行比较
问题描述
我有以下枚举,它代表一个 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()
orordinal()
方法似乎是要走的路,但是我在将 String 参数转换为数字时遇到了麻烦。
这是我最近的尝试:
public boolean isOrdered (Position position) {
for (Position p : values()) {
if (position.compareTo(p) >=0)
return true;
}
return false;
}
设法解决它。
解决方案
也许添加订单:
public enum Position
{
ACE('A', 14), KING('K', 13), QUEEN('Q', 12), JACK('J', 11),
TEN('T', 10), NINE('9', 9), EIGHT('8', 8), SEVEN('7', 7),
SIX('6', 6), FIVE('5', 5), FOUR('4', 4), TREY('3', 3), DEUCE('2', 2);
private char symbol;
private int order;
private Position(char symbol, int order)
{
this.symbol = symbol;
this.order = order;
}
public char getSymbol()
{
return this.symbol;
}
public boolean isPreceding (Position position) {
return this.order < position.order;
}
}
推荐阅读
- laravel - 子域上的 Laravel 收到 403 Forbidden 错误。因为它找不到位于 public/ 文件夹中的 index.php 文件
- javascript - JS AJAX:承诺依赖提交总是提交
- javascript - 仅在 iPhone 上拖动网站上的元素时的 WinXP 风格的拖动故障效果
- physics - 将物理体访问到 Phaser 3 中的组
- gradle - 无法将“字符串”分配给“T”
- flutter - SemanticsService.announce 在颤振中
- java - 如何使用路径类?
- c++ - `typename` 不应该只用在模板函数或模板类中吗?
- scheme - 在 Guile 中跟踪 - 如何在 Guile 方案中进行跟踪
- javascript - Html 如何在我的模板中包含脚本?