java中通常有兩種隨機數,一個是Math中random()方法,一個是Random類。java
1、Math.random() : 隨即生成0<x<1的小數算法
實例:如何寫,生成隨機生成出0~100中的其中一個數呢?dom
Math.random()返回的只是從0到1之間的小數,若是要50到100,就先放大50倍,即0到50之間,這裏仍是小數,若是要整數,就強制轉換int,而後再加上50 即爲50~100.
最終代碼:(int)(Math.random()*50) + 50spa
2、Random類code
Random random = new Random();//默認構造方法對象
Random random = new Random(1000);//指定種子數字blog
在進行隨機時,隨機算法的起源數字稱爲種子數(seed),在種子數的基礎上進行必定的變換,從而產生須要的隨機數字。相同種子數的Random對象,相同次數生成的隨機數字是徹底相同的。也就是說,兩個種子數相同的Random對象,第一次生成的隨機數字徹底相同,第二次生成的隨機數字也徹底相同,舉例:數學
Random random1 = new Random(100); System.out.println(random1.nextInt()); System.out.println(random1.nextFloat()); System.out.println(random1.nextBoolean()); Random random2 = new Random(100); System.out.println(random2.nextInt()); System.out.println(random2.nextFloat()); System.out.println(random2.nextBoolean()); // 兩次輸出的結果是同樣的。
事實上,Random是一種僞隨機數,相同的種子產生相同的序列class
Random類的經常使用方法:基礎
(1) public boolean nextBoolean()
該方法的做用是生成一個隨機的boolean值,生成true和false的值概率相等,也就是都是50%的概率
(2) public double nextDouble()
該方法的做用是生成一個隨機的double值,數值介於[0,1.0)之間,這裏中括號表明包含區間端點,小括號表明不包含區間端點,也就是0到1之間的隨機小數,包含0而不包含1.0
(3) public int nextInt()
該方法的做用是生成一個隨機的int值,該值介於int的區間,也就是-2的31次方到2的31次方-1之間
(4) public int nextInt(int n)
該方法的做用是生成一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n
(5) public void setSeed(long seed)
該方法的做用是從新設置Random對象中的種子數。設置完種子數之後的Random對象和相同種子數使用new關鍵字建立出的Random對象相同。每次的Seed不一樣,random就不一樣了。在進行隨機時,隨機算法的起源數字稱爲種子數(seed),在種子數的基礎上進行必定的變換,從而產生須要的隨機數字。要了解Seed的做用,得先了解隨機數原理。
Random類的使用實例: 使用Random類,通常是生成指定區間的隨機數字,下面就一一介紹如何生成對應區間的隨機數字
Random r = new Random();
1) 生成[0,1.0)區間的小數: double d1 = r.nextDouble();
2) 生成[0,5.0)區間的小數: double d2 = r.nextDouble() * 5;
3) 生成[1,2.5)區間的小數 [n1,n2]: double d3 = r.nextDouble() * 1.5 + 1;【也就是 r.nextDouble() * (n2-n1)+n1】
生成[1,2.5)區間的隨機小數,則只須要首先生成[0,1.5)區間的隨機數字,而後將生成的隨機數區間加1便可。
同理,生成任意非從0開始的小數區間[d1,d2)範圍的隨機數字(其中d1不等於0),則只須要首先生成[0,d2-d1)區間的隨機數字,而後將生成的隨機數字區間加上d1便可。
4) 生成[0,10)區間的整數: int n2 = r.nextInt(10);
也可使用這個方法 int n3 = Math.abs(r.nextInt() % 10); 這種方法首先調用nextInt()方法生成一個任意的int數字,該數字和10取餘之後生成的數字區間爲(-10,10),由於按照數學上的規定餘數的絕對值小於除數,而後再對該區間求絕對值,則獲得的區間就是[0,10)了。