java中的隨機數Random

來源:互聯網
上載者:User

轉自:http://lehsyh.iteye.com/blog/646658

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對象,第一次產生的隨機數字完全相同,第二次產生的隨機數字也完全相同。

 

2 、Random類中的常用方法

Random 類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中各方法產生的隨機數字都是均勻分布的,也就是說區間內部的數字產生的幾率是均等的。下面對這些方法做一下基本的介紹:

a 、public boolean nextBoolean()

該方法的作用是產生一個隨機的boolean值,產生true和false的值幾率相等,也就是都是50%的幾率。

b 、public double nextDouble()

該方法的作用是產生一個隨機的double值,數值介於[0,1.0)之間,這裡中括弧代表包含區間端點,小括弧代表不包含區間端點,也就是0到1之間的隨機小數,包含0而不包含1.0。

 

c 、public int nextInt()

該方法的作用是產生一個隨機的int值,該值介於int的區間,也就是-2的31次方到2的31次方-1之間。

如果需要產生指定區間的int值,則需要進行一定的數學變換,具體可以參看下面的使用樣本中的代碼。

d 、public int nextInt(int n)

該方法的作用是產生一個隨機的int值,該值介於[0,n)的區間,也就是0到n之間的隨機int值,包含0而不包含n。

如果想產生指定區間的int值,也需要進行一定的數學變換,具體可以參看下面的使用樣本中的代碼。

e 、public void setSeed(long seed)

該方法的作用是重新設定Random對象中的種子數。設定完種子數以後的Random對象和相同種子數使用new關鍵字建立出的Random對象相同。

3 、Random類使用樣本

使用Random類,一般是產生指定區間的隨機數字,下面就一一介紹如何產生對應區間的隨機數字。以下產生隨機數的代碼均使用以下Random對象r進行產生:

Random r = new Random();

a 、產生[0,1.0)區間的小數

 double d1 = r.nextDouble();
直接使用nextDouble方法獲得。

b、產生[0,5.0)區間的小數

double d2 = r.nextDouble() * 5;

因為nextDouble方法產生的數字區間是[0,1.0),將該區間擴大5倍即是要求的區間。

 

同理,產生[0,d)區間的隨機小數,d為任意正的小數,則只需要將nextDouble方法的傳回值乘以d即可。

c、產生[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即可。

d、產生任意整數

int n1 = r.nextInt();

直接使用nextInt方法即可。

e、產生[0,10)區間的整數

int n2 = r.nextInt(10);

n2 = Math.abs(r.nextInt() % 10);

以上兩行代碼均可產生[0,10)區間的整數。

第一種實現使用Random類中的nextInt(int n)方法直接實現。

第二種實現中,首先調用nextInt()方法產生一個任意的int數字,該數字和10取餘以後產生的數字區間為(-10,10),因為按照數學上的規定餘數的絕對值小於除數,然後再對該區間求絕對值,則得到的區間就是[0,10)了。

同理,產生任意[0,n)區間的隨機整數,都可以使用如下代碼:

int n2 = r.nextInt(n);

n2 = Math.abs(r.nextInt() % n);

f、產生[0,10]區間的整數

int n3 = r.nextInt(11);

n3 = Math.abs(r.nextInt() % 11);

相對於整數區間,[0,10]區間和[0,11)區間等價,所以即產生[0,11)區間的整數。

g、產生[-3,15)區間的整數

int n4 = r.nextInt(18) - 3;   【也就是 r.nextInt() * (n2-n1)+n1】 n1是個負數

n4 = Math.abs(r.nextInt() % 18) - 3;    

產生非從0開始區間的隨機整數,可以參看上面非從0開始的小數區間實現原理的說明。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.