Java 使用值确定枚举值

Java 使用值确定枚举值,java,oop,enums,Java,Oop,Enums,我被困在一个看似简单的问题上 假设我有以下枚举: enum CARDS { JOKER(1), JACK(2), QUEEN(3), KING(4), ACE(5) ; private final int cardNumber; CARDS(int cardNumber) { this.cardNumber = cardNumber

我被困在一个看似简单的问题上

假设我有以下枚举:

   enum CARDS {

        JOKER(1),
        JACK(2),
        QUEEN(3),
        KING(4),
        ACE(5)
        ;

        private final int cardNumber;

        CARDS(int cardNumber) {

            this.cardNumber = cardNumber;

        }

    }

我想找到一种方法,使用从单独的类随机生成的整数来确定枚举(小丑、杰克、皇后、国王、王牌)的值。这可能吗?这是一种良好的做法吗

例如:

我有一个整数,比如说,3

我想将整数与分配给枚举的常量值相匹配,在这种情况下,我的整数3将导致与皇后配对。

简单如下:

int整数=3;
CARDS card=CARDS.values()[integer-1];
注意:这是因为皇后序号是2(从零开始)

使用
CARDS.valueOf(String)
将枚举名称转换为CARDS成员

就良好实践而言,我建议采用一种设计,利用序号进行排序和随机选择,如果您需要排名或实力,则使用这些单独的属性(就像您所做的那样)

您可以使用以下选项选择随机成员:

CARDS[]deck=CARDS.values();
随机=新随机();
卡片卡片=卡片组[随机.nextInt(卡片组.长度)];
不依赖任何特定的序数值。

它非常简单:

int整数=3;
CARDS card=CARDS.values()[integer-1];
注意:这是因为皇后序号是2(从零开始)

使用
CARDS.valueOf(String)
将枚举名称转换为CARDS成员

就良好实践而言,我建议采用一种设计,利用序号进行排序和随机选择,如果您需要排名或实力,则使用这些单独的属性(就像您所做的那样)

您可以使用以下选项选择随机成员:

CARDS[]deck=CARDS.values();
随机=新随机();
卡片卡片=卡片组[随机.nextInt(卡片组.长度)];

不依赖任何特定的序数值。

正如下面的答案所指出的,枚举会自动存储在数组中,因此您不需要
cardNumber
字段,除非您计划将其用于其他用途。正如下面的答案所指出的,枚举会自动存储在数组中,因此,除非您打算将其用于其他用途,否则您不需要使用
cardname
字段。这将起作用,但我认为我的建议与该帖子的主要答案一致。我将在我的答案中添加一个选择随机成员的具体示例。@dnault,在本例中,这是一个很好的做法,因为OP希望使用序号随机选择枚举值(可能用于“组洗牌”方法)。使用序数的问题是,EnUM类中的值迟早会被重新排列——或者是偶然的,或者有人希望按字母顺序排序,或者只是在中间插入一个新的值。如果在一个完全不同的类中使用一些粗略的商业逻辑的序数值,这样的重新排序将破坏您的代码。如果您只需要一个随机值,那么重新排序的枚举也将是随机的。在枚举中创建一个静态方法并将此逻辑放在那里可能是合适的。这将起作用,但我认为我的建议与该帖子的主要答案一致。我将在我的答案中添加一个选择随机成员的具体示例。@dnault,在本例中,这是一个很好的做法,因为OP希望使用序号随机选择枚举值(可能用于“组洗牌”方法)。使用序数的问题是,EnUM类中的值迟早会被重新排列——或者是偶然的,或者有人希望按字母顺序排序,或者只是在中间插入一个新的值。如果在一个完全不同的类中使用一些粗略的商业逻辑的序数值,这样的重新排序将破坏您的代码。如果您只需要一个随机值,那么重新排序的枚举也将是随机的。在枚举中创建一个静态方法并将此逻辑放在那里可能是合适的。