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

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

我的解决方案是创建一个类,让我们称之为“元素”,两个整数(num,numOfAppearnces)。

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

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

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

例如 :

 Integer[] arr = {3,6,7,11,20}; List 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 

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

 Integer[] arr = {3,6,7,11,20}; List 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 

这是简单的Python程序

 import random def genRNum(): numlist = [3,6,7,11,20] i = random.randrange(0,4) RNum = numlist[i] print(RNum) genRNum() 

另一种最简单的方法是使用Windows PowerShell

随机3,6,7,11,20

不是吗