You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:24:03