Java Position枚举数值与入参大小比较功能实现咨询
扑克牌面枚举等级比较实现方案
原始枚举定义
按牌面从大到小降序排列的Position枚举定义如下:
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; } }
需求说明
需要实现isPreceding方法,规则为:当前枚举实例对应的牌面等级大于等于传入参数的牌面等级时返回true,否则返回false,匹配如下测试用例:
@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)); }
实现方案
Java枚举自带的ordinal()方法会返回枚举常量的定义顺序下标,由于该枚举是按牌面从大到小的顺序定义的,所以下标越小代表牌面等级越高。直接比较当前实例和传入参数的ordinal值即可满足需求:
public boolean isPreceding(Position target) { return this.ordinal() <= target.ordinal(); }
逻辑验证
Position.TEN的ordinal值为4,Position.ACE的ordinal值为0,4 <= 0不成立返回false,符合测试要求Position.TEN的ordinal值为4,Position.NINE的ordinal值为5,4 <=5成立返回true,符合测试要求- 其余所有测试用例均可以通过该逻辑匹配
原有代码问题
最初的实现循环遍历所有枚举值,没有建立当前实例和传入参数的等级比较逻辑,所以无法得到正确结果。
内容的提问来源于stack exchange,提问作者goodname
相关产品推荐
相关产品推荐

