Java中一系列随机数的随机数?

时间:2013-07-07 15:26:20

标签: java random

假设我有五个变量a,b,c,d和e,它们都分配了五个不同范围的随机数,对应于五个变量a到e。

有没有办法分配第六个变量说x,从一个上限值等于a + b + c + d + e总和的范围中选择一个随机数?

例如,说: -

a=5      (range 0-10)
b=1043   (range 0-2000)
c=37     (range 0-38)
d=2      (range 0-100)
e=20     (range 5-30)

then x = (random number) (range 5- 1107)

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

您可以使用

Min + (int)(Math.random() * ((Max - Min) + 1))

其中Min = a且Max = a + b + c + d + e

答案 1 :(得分:1)

来自java.util.Random

Random rand = new Random();

rand.nextInt(X); 
//returns an `int` in range: [0,X)

所以,如果您有ab,...,n,要获得介于0和变量之和之间的数字,我们会这样做:

rand.nextInt(a + b + ... + n + 1); //returns an `int` in range [0, sum(a,b,...,n)]


正如其他用户建议的那样,您也可以使用Math.random();但是,Math.random()会在范围内返回double[0,1)。因此,如果您有min = 0max = 9,并且想要一个介于[0,9]之间的数字,那么您需要:

Min + (int)(Math.round((Math.random() * (Max - Min))))
//need to cast to int since Math.round(double returns a long)

or you could do:

Min + (int)(Math.random() * (Max - Min + 1))

答案 2 :(得分:0)

编辑:我误解了你的问题,但你只需要对每个var求和并做同样的事情。一些答案已经表明了这一点。

这只是一个算法问题。

int lra = 0;    // lower range of a
int ura = 10;   // upper range of a
int lrb = 0;
int urb = 2000;
// a couple of ranges for each var...

int a = lra + ((int) (Math.random() * (ura - lra)));
// the same for each var...

int lrs = lra + lrb + ...; // sum of lower ranges...
int urs = ura + urb + ...; // sum of upper ranges

int x = lrs + ((int) (Math.random() * (urs - lrs)));

答案 3 :(得分:0)

像这样的事情应该做的工作

            Random generator = new Random();
            generator.setSeed(System.currentTimeMillis());
            long range = a+b+c+d+e;
            long fraction = (long)(range * generator.nextDouble());
            randomNumber =  (int)(fraction);