2013-04-15 99 views
3

我想找出一種方法來生成1/2和-1/2之間的隨機值。如何生成-1/2到1/2之間的隨機值

我想下面的東西,但不知道這是做正確的方式....

可有人請讓我知道要實現這個好辦法?

public static void main(String args[]) { 
     double Max = .5; 
     double Min = -0.5; 
     for (int i = 0; i < 10000; i++) { 
      double value = Min + ((Math.random()) * (Max - Min)); 
      System.out.println(value); 
     } 
    } 
+0

爲什麼不直接產生隨機整數在1和一些大數n之間,並乘以點數1000或類似的東西? –

回答

9

Math.random()返回01之間的隨機雙,這樣的範圍更改爲-1/21/2,我們就可以減去1/2(因爲0 - 1/2 = -1/21 - 1/2 = 1/2):

Math.random() - 0.5 

你現在正在做的是更普遍的,也就是說,如果你想minmax之間的雙合適的表達會

min + Math.random() * (max - min) 

在這種情況下,在min = -0.5max = 0.5堵我們

-0.5 + Math.random() * (0.5 - -0.5) 

這簡化到

Math.random() - 0.5 

我還應該提到,如果你閱讀random()方法的文檔,你會發現它返回的雙倍大於或等於到0.0和小於 1.0。這意味着上面的表達式應該產生[-0.5, 0.5)範圍內的數字,這意味着-0.5可能會返回,但0.5不能。

+4

注意範圍將是[-1/2,1/2)。它不會選擇完全1/2,但它會選擇-1/2 – Justin

+0

@gangqinlaohu謝謝,我編輯提及 – arshajii

+2

如果你想(-1/2,1/2),你可以做0.5 - x而不是x - 0.5 – Thilo

5

你可能只是做:

Math.random() - 0.5 

這是因爲Math.random()最小爲0,最大爲1。如果你減去一半,最小將是0 - 0.5 == -0.5和最大會是1 - 0.5 == 0.5

因此,你原來的代碼可以簡化爲:

public static void main(String args[]) { 
    for (int i = 0; i < 10000; i++) { 
     double value = Math.random() - 0.5; // no need for a "double" cast, 
              // Math.random() returns a double 
     System.out.println(value); 
    } 
} 
1

記住,在的Math.random()類將返回0和1之間的值,不包括1

在這種情況下,Math.Random()-0.5將工作嬌聲

相關問題