java中一般有兩種隨機數,一個是Math中random()方法,一個是Random類。
一、Math.random() : 隨即生成0<x<1的小數
實例:如何寫,生成隨機生成出0~100中的其中一個數呢?
Math.random()返回的只是從0到1之間的小數,如果要50到100,就先放大50倍,即0到50之間,這里還是小數,如果要整數,就強制轉換int,然后再加上50 即為50~100.
最終代碼:(int)(Math.random()*50) + 50
二、Random類
Random random = new Random();//默認構造方法
Random random = new Random(1000);//指定種子數字
在進行隨機時,隨機算法的起源數字稱為種子數(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是一種偽隨機數,相同的種子產生相同的序列
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)了。
