0

Say i have five variables a,b,c,d and e which are all assigned a random number from five different ranges corresponding to to the five variables a to e.

Is there a way to assign a sixth variable say x, that chooses a random number from a range with upper value equal to the total of a+b+c+d+e?

for example, say :-

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)

Thanks for any assistance

4

4 に答える 4

1

使用できます

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

ここで、最小 = a および最大 = a+b+c+d+e

于 2013-07-07T15:30:07.147 に答える
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()の a を返しますdouble: [0,1)。したがって、 があり、の間の数値が必要な場合はmin = 0、次のものが必要です。max = 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))
于 2013-07-07T15:31:48.167 に答える
0

編集:私はあなたの問題を誤解しましたが、各変数を合計して同じことをするだけです。いくつかの回答はすでにそれを示しています。

それは単なるアルゴリズムの問​​題です。

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)));
于 2013-07-07T15:32:00.230 に答える
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);  
于 2013-07-07T15:32:31.627 に答える