簡體   English   中英

Java中一系列隨機數的隨機數?

[英]Random number from a series of random numbers in Java?

假設我有五個變量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)

謝謝你的幫助

您可以使用

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

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

來自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))

編輯:我很想念你的問題,但你只需要對每個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)));

像這樣的東西應該做的工作

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM