2010-09-09 86 views
89

隨機雙我有兩個雙打像下面產生一系列

double min = 100; 
double max = 101; 

,並用隨機生成的,我需要創建最小和最大的範圍之間的雙重價值。

Random r = new Random(); 
r.nextDouble(); 

但這裏沒有什麼地方可以指定範圍。

回答

172

要生成rangeMinrangeMax之間的隨機值:

Random r = new Random(); 
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble(); 
+16

這通常是正確的,但要小心它的限制。如果你使用'double rangeMax = Double.MAX_VALUE;'和'double rangeMin = -rangeMax;'你總是會得到一個無限的值作爲回報。你可能想檢查'Double.valueOf(rangeMax-rangeMin).isInfinite()'。 – lre 2014-04-07 10:55:13

28

使用此:

double start = 400; 
double end = 402; 
double random = new Random().nextDouble(); 
double result = start + (random * (end - start)); 
System.out.println(result); 

編輯:

new Random().nextDouble():隨機產生一個數是吐溫0和1

start:開始數,轉移號碼 「向右」

end - start:間隔。隨機爲您提供了從0%這個數字的100%,因爲隨機給你一個從0數1


編輯2: 韓國社交協會@daniel和@aaa BBB。我的第一個回答是錯誤的。

83

這個問題被問的Java 7發佈之前,但現在,有使用Java 7(及以上)API另一種可能的方式:

double random = ThreadLocalRandom.current().nextDouble(min, max); 

nextDouble將返回最小值之間的僞雙值(含)最大(獨家)。邊界不一定是int,可以是double

+2

調用需要api 21 – Nepster 2017-02-01 10:25:10