如何从不相互跟随的数字池中生成随机数
我有一个数字池(例如{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
不是吗