2011-09-15 122 views
4
public class TestSample { 
    public static void main(String[] args) { 

     int a = Integer.parseInt(args[0]); 
     int b = Integer.parseInt(args[1]); 

     double ran = Math.random(); 



    } 
} 

我不想使用Random r = new Random();類。有沒有其他的方式來產生隨機數字。我只是想知道可以應用什麼邏輯來在兩個數字之間生成隨機數。在兩個數字之間生成隨機數

+2

http://stackoverflow.com/questions/363681/java-generating-random-number-in-a-range –

+0

請問爲什麼你不想使用隨機類? –

+1

不想使用Random類嗎?請考慮使用此代替:http://xkcd.com/221/ – NPE

回答

5

考慮使用此代碼:

int a = Integer.parseInt(args[0]); 
int b = Integer.parseInt(args[1]); 
double ran = Math.random(); 
double random; 

if(a < b) 
    random = (b-a)*ran + a; 
else 
    random = (a-b)*ran + b; 

這將爲a >= 0 and b >= 0工作,如果你考慮使用負數邏輯sligtly改變

+1

+1:你不需要檢查哪個更大或者它們是否是肯定的。如果'a'和'b'分別表示'1'和'5',您將得到一個介於'1'和'5'或'5'和'1'之間的隨機數。結果應該是相同的。 –

+0

是的,你是對的......因爲那麼差異會消極,並被減去大的一個。感覺懶惰的測試行爲與負數...:頁 – Stefano

8

這真的很容易...你只需要弄清楚哪個是最小值,兩個數字之間有什麼區別(我們稱之爲diff)。然後,可以通過乘以diff(現在其範圍介於0diff之間)來縮放Math.random值(在01之間)。然後,如果你添加的最低值,你的範圍是minmin + diff之間(這是其他值)

​​
0

如果你期待一個double結果,最簡單的方法是

int a = 
int b = 
double result = (a-b)*Math.random() + b; 

無論您獲得相同的分配,哪個更重要。

但是,如果你想要一個'a'和'b'之間的隨機整數有點複雜。

int a = 
int b = 
int result = Math.floor((Math.abs(a-b)+1) * Math.random()) + Math.min(a, b); 

其原因的結果不同的是,1的隨機雙介於0和將只是小於1,即[0.0,1.0),但圖1和6之間的隨機整數通常包括1,2,3, 4,5,6均等。作爲小數點,這是[0.0 ... 7.0]的整數下降。

0

您可能會從麥克風獲得白噪聲,並從中取出任何數字。之後,您可以從給定的數據中獲取任何數字,並根據您的需要進行處理。從麥克風獲取數據的示例可以找到here

相關問題