Random類 (java.util)
Random類中實現的隨機算法是僞隨機,也就是有規則的隨機。在進行隨機時,隨機算法的起源數字稱爲種子數(seed),在種子數的基礎上進行一定的變換,從而產生需要的隨機數字。
相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字完全相同,第二次生成的隨機數字也完全相同。這點在生成多個隨機數字時需要特別注意。
Random對象的生成
Random類包含兩個構造方法,下面依次進行介紹:
a、public Random()
該構造方法使用一個和當前系統時間對應的相對時間有關的數字作爲種子數,然後使用這個種子數構造Random對象。
b、public Random(long seed)
該構造方法可以通過制定一個種子數進行創建。
Random random = new Random();
Random random1 = new Random(10);
System.out.println("random:" + random);
System.out.println("random1:" + random1);
Random類中的常用方法
Random類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中各方法生成的隨機數字都是均勻分佈的,也就是說區間內部的數字生成的機率是均等的。
a、public boolean nextBoolean()
該方法的作用是生成一個隨機的boolean值,生成true和false的值機率相等,也就是都是50%的機率。
b、public double nextDouble()
該方法的作用是生成一個隨機的double值,數值介於[0,1.0)之間。
c、public int nextInt()
該方法的作用是生成一個隨機的int值,該值介於int的區間。
d、public int nextInt(int n)
該方法的作用是生成一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n。
e、public void setSeed(long seed)
該方法的作用是重新設置Random對象中的種子數。設置完種子數以後的Random對象和相同種子數使用new關鍵字創建出的Random對象相同。
其他問題
a、相同種子數Random對象問題
前面介紹過,相同種子數的Random對象,相同次數生成的隨機數字是完全相同的。
b、關於Math類中的random方法
其實在Math類中也有一個random方法,該random方法的工作是生成一個[0,1.0)區間的隨機小數。
通過閱讀Math類的源代碼可以發現,Math類中的random方法就是直接調用Random類中的nextDouble方法實現的。
只是random方法的調用比較簡單,所以很多程序員都習慣使用Math類的random方法來生成隨機數字。
參考資料:http://www.cnblogs.com/Fskjb/archive/2009/08/29/1556417.html