首页 > 解决方案 > 将 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;
    }

设法解决它。

标签: javaenums

解决方案


也许添加订单:

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;
    }
}

推荐阅读