Random 類使用注意

---------------------- android培訓java培訓、期待與您交流! ----------------------

         Random 類專門用於生成一個僞隨機數,他有兩個構造函數:一個構造函數使用默認的種子,另一個構造函數需要程序員
顯示傳入一個long 類型的種子。同時他提供了很多方法來生成僞隨機數。即如果類的兩個實例時用同一個種子創建的,
對他們以同樣的順序調用方法,則他們會產生相同的數字序列。

下面做個試驗驗證一下,當兩個Random對象的Seed相同時,他們會產生相同的數字序列,需要注意的是,當使用默認的種子
構造Random對象時,那麼他們的seed就相同,屬於同一個seed。

 

import java.util.Random;
class  SeedTest
{
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
	public static void main(String[] args) 
	{
		Random r1 = new Random(50);

		sop("第一個seed爲50的隨機數對象:");
		sop("r1.nextBoolean():\t" + r1.nextBoolean());
		sop("r1.nextInt():\t\t" + r1.nextInt());
		sop("r1.nextDouble():\t" + r1.nextDouble());
		sop("r1.nextGaussian():\t" + r1.nextGaussian());
		sop("-------------------------------------------");

		Random r2 = new Random(50);

		sop("第二個seed爲50的隨機數對象:");
		sop("r2.nextBoolean():\t" + r2.nextBoolean());
		sop("r2.nextInt():\t\t" + r2.nextInt());
		sop("r2.nextDouble():\t" + r2.nextDouble());
		sop("r2.nextGaussian():\t" + r2.nextGaussian());
		sop("-------------------------------------------");


		Random r3 = new Random(100);

		sop("第三個seed爲100的隨機數對象:");
		sop("r3.nextBoolean():\t" + r3.nextBoolean());
		sop("r3.nextInt():\t\t" + r3.nextInt());
		sop("r3.nextDouble():\t" + r3.nextDouble());
		sop("r3.nextGaussian():\t" + r3.nextGaussian());
		sop("--------------over-------------------------");

	}
}


/*
運行結果:
D:\learning\0801>java SeedTest
第一個seed爲50的隨機數對象:
r1.nextBoolean():       true
r1.nextInt():           -1727040520
r1.nextDouble():        0.6141579720626675
r1.nextGaussian():      2.377650302287946
-------------------------------------------
第二個seed爲50的隨機數對象:
r2.nextBoolean():       true
r2.nextInt():           -1727040520
r2.nextDouble():        0.6141579720626675
r2.nextGaussian():      2.377650302287946
-------------------------------------------
第三個seed爲100的隨機數對象:
r3.nextBoolean():       true
r3.nextInt():           -1139614796
r3.nextDouble():        0.19497605734770518
r3.nextGaussian():      0.6762208162903859
--------------over-------------------------
*/

從上面運行結果來看,如果兩個Random對象的種子相同,而且方法的調用順序也相同,則他們會產生相同的
數字序列,這也說明,Random 產生的數字並不是真正隨機的,而是一種僞隨機。

所以爲了避免兩個Random對象產生相同的數字序列,開發時通常推薦使用當前時間來作爲Random對象的種子
即:
 Random rand = new Random(System.currentTimeMillis());

 

 

 ---------------------- android培訓java培訓、期待與您交流! ----------------------詳細請查看:http://edu.csdn.net/heima

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章