【问题标题】:How to randomly select an enum value? [duplicate]如何随机选择一个枚举值? [复制]
【发布时间】:2016-05-18 13:29:59
【问题描述】:

我正在编写二十一点游戏。我有所有可用卡类型的枚举。处理时,我想使用 Random 从枚举中随机选择一张卡给玩家。如何使用整数值对应枚举值?或者,如何为该枚举的变量随机选择一个枚举值?

void chooseCard() {
    Random rn = new Random();
    Card myCard = rn.nextInt(); //How can I do something like this? (randomly select Card value)? 0 being ACE, 1 being TWO...
}

纸牌的恩恩:

public enum Cards {
    ACE("ACE", 1, 11), TWO("TWO", 2), THREE("THREE", 3), FOUR("FOUR", 4), FIVE("FIVE", 5), SIX("SIX", 6), 
    SEVEN("SEVEN",7), EIGHT("EIGHT", 8), NINE("NINE", 9), TEN("TEN", 10), JACK("JACK", 10), KING("KING", 10), QUEEN("QUEEN",10);

    private int value1;
    private int value2;
    private String name;

    private Cards(String name, int value1) {
        this.value1 = value1;
    }

    private Cards(String name, int value1, int value2) {
        this.value1 = value1;
        this.value2 = value2;
    }

    public int getValue1() {
        return value1;
    }

    public int[] getValue2() {
        int[] val = { value1, value2 };
        return val;
    }

    public String getName() {
        return name;
    }

}

【问题讨论】:

  • 我确实找到了这个:stackoverflow.com/questions/1972392/…。但是,我实际上并不了解示例代码是如何工作的,所以如果这是正确的答案,那么我也会对此进行解释。
  • 您确定要随机卡吗?一个玩家可以连续获得 5 张黑桃 A?我也不确定你是否想要 enum 作为卡片。 class Cardenum Suit 可能是首选?
  • @Emz 我想到了。我只有一个数组:private int[] deck = new int[13]; 每个元素都初始化为 4。每次说 ACE 被选中,deck[0] = deck[0] - 1。然后我会在给卡牌之前检查该类型的牌数是否超过 0。我可以试试你的方法,但它可能会更好。我只是为了好玩/学习而做这一切,所以我并没有固定的结构。
  • 这么多类似的问题,你都看完了吗? stackoverflow.com/search?q=card+deck+java
  • @Emz 实际上这比我目前所做的要聪明得多。这样,如果我以后想要的话,我也可以玩多个套牌。我要把它改成那样。谢谢,作为初学者,我总是很喜欢更清洁/更高效的编程技巧

标签: java random enums


【解决方案1】:
// get an array of all the cards
private Card[]cards=Cards.values();
// this generates random numbers
private Random random = new Random();
// choose a card at random
final Card random(){
     return cards[random.nextInt(cards.length)];
}

【讨论】:

  • 非常感谢! values() 方法是关键,我必须记住这一点。
  • 避免在方法中使用Random random = new Random(),将其保留为类的字段。
  • 只需使用cards[random.nextInt(cards.length)] 而不是% cards.length
  • @Emz 是的,我会确保这样做。
猜你喜欢
  • 1970-01-01
  • 2019-03-20
  • 2013-10-20
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多