java - 如何从枚举生成 random value 并将其放入数组中?

我得到一个充满“项目”的枚举,我想生成枚举的一个 random 项目并将其放入我的库存中,这是我用一个数组制作的。该数组只有 10 个整数的空间。

public class InventoryEnums {
    public static void main (String[] args){

    int[] inventar = new int[9] // int array mit 10 Plätzen

    enum items {
        KARTE, MONSTERBALL, MONSTERDEX, FAHRRAD, VM03, HYPERHEILER, AMRENABEERE, TOPGENESUNG, ANGEL, TOPSCHUTZ
    }

回答1

枚举应该以单数命名,并且应该以大写字母开头。

enum Item { KARTE, MONSTERBALL, MONSTERDEX, FAHRRAD, VM03, HYPERHEILER, AMRENABEERE, TOPGENESUNG, ANGEL, TOPSCHUTZ }

我建议你设计一个比“项目”更具描述性的名称。

通过调用 values 获取所有枚举对象的数组。

Item[] allItems = Item.values() ;

生成一个 random 数字。使用该数字作为所有项目数组的索引。

int randomIndex = ThreadLocalRandom.current().nextInt( 0 , allItems.length ) ;  // ( inclusive , exclusive )
Item rando = allItems[ randomIndex ] ;

或者,也许您打算对枚举的所有元素进行随机排序(洗牌)。如果是这样,请创建一个由数组支持的 List。呼叫 Collections.shuffle。对列表所做的更改也会影响支持数组。所以数组被打乱了。

Item[] allItems = Item.values() ;
List< Item > list = Arrays.asList( allItems );
Collections.shuffle( list );

更简单地说:

Item[] allItems = Item.values() ;
Collections.shuffle( Arrays.asList( allItems ) );

查看此https://ideone.com/Yvwhjo

[MONSTERBALL、TOPSCHUTZ、KARTE、FAHRRAD、VM03、MONSTERDEX、ANGEL、AMRENABEERE、TOPGENESUNG、HYPERHEILER]

回答2

你可以得到一个 random 整数 value ,它在 0 到 array.length 的范围内

int rand = new Random().nextInt(items.values().length);

然后你可以得到 random value 使用生成的 enum

items.values()[rand];

然后在循环中使用它来填充数组。

回答3

这不是你想要的吗?

public class App {
    public static void main(String[] args) {
        Random random = new Random();

        enum items {
            KARTE, MONSTERBALL, MONSTERDEX, FAHRRAD, VM03, HYPERHEILER, AMRENABEERE, TOPGENESUNG, ANGEL, TOPSCHUTZ
        }

        items[] inventar = items.values();

        int index = random.nextInt(inventar.length);

        System.out.println(inventar[index]);

    }
}

回答4

还有另一种方法:

enum Item {
        KARTE, MONSTERBALL, MONSTERDEX, FAHRRAD, VM03, HYPERHEILER, AMRENABEERE, 
     TOPGENESUNG, ANGEL, TOPSCHUTZ
   }
   Item[] inventar = Item.values();
   Item singleItem = inventar[new Random().nextInt(inventar.length)];