如何从不相互跟随的数字池中生成随机数

Avi*_*viv 4 c# java random

我有一个数字池(例如{3,6,7,11,20}),我需要每个数字出现在我的集合中x次.

我的解决方案是创建一个类,让它称之为"元素",两个整数(num,numOfAppearnces).

我在arrayList中创建了一个"元素"池,然后在0到list.size之间生成一个随机数,并将该数字存储在随机索引中.当numOfAppearances减少到0时,我从列表中删除了这个元素.

我的问题是,有没有其他优雅的解决方案来生成随机数,而不是从一个范围?

Era*_*ran 6

是的,有更短的方法来实现您描述的内容.

例如 :

Integer[] arr = {3,6,7,11,20};
List<Integer> shuffled = new ArrayList<>();
for (Integer i : arr)
    shuffled.addAll (Collections.nCopies(x,i)); // add i to your List x times
Collections.shuffle(shuffled); // shuffle the List to get random order
Run Code Online (Sandbox Code Playgroud)

或者(如果你不想使用Collections.nCopies(x,i)):

Integer[] arr = {3,6,7,11,20};
List<Integer> shuffled = new ArrayList<>();
for (int j = 0; j < x; j++)
    for (Integer i : arr)
        shuffled.add (i);
Collections.shuffle(shuffled); // shuffle the List to get random order
Run Code Online (Sandbox Code Playgroud)