我没有设法在Math.random或Util.random中找到这样的函数。例如,我给出2的平均值并生成N个随机数,当我将它们平均为平均值时,我给函数提供了数字(在本例中为2)。
public static int[] randomNumbersWithGivenMean(int average)
{
...
}
答案 0 :(得分:3)
通常,如果您生成1..N
范围内的随机数列表,则列表项的平均值将为N / 2
。列表越大,这就越有可能成立。
public static int[] getRandomList(int average, int listSize) {
Random rand = new Random();
int[] list = new int[listSize];
for(int i = 0; i < listSize; i++) {
list[i] = rand.nextInt(average * 2) + 1;
}
return list;
}
你没有提到你想要产生的数字范围,所以我假设1..N
就足够了。如果您希望更改此设置,则必须确保在average
上均匀生成数字。
答案 1 :(得分:3)
您在寻找高斯分布随机数吗?
有一种名为nextGaussian()
的方法,如文档中所述:
返回下一个伪随机,高斯(&#34;正常&#34;)分布式双精度值,其平均值为0.0,标准偏差为1.0。此随机数生成器的序列。
然后你必须改变结果以符合你想要的标准偏差(通过乘法)和平均值(通过加法)。
您拨打nextGaussian()
的次数越多,越好(数字意味着更接近所需的平均值)。