成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析JAVA的Random類

開發(fā) 后端
Random類中的方法比較簡單,每個方法的功能也很容易理解。需要說明的是,Random類中個方法生成的隨機數(shù)字都是均勻分布,也就是說區(qū)間內(nèi)部的數(shù)字生成的幾率是均等的。下面對這些方法做一下基本的介紹。

Random類中實現(xiàn)的隨機算法是偽隨機,也就是有規(guī)則的隨機。在進行隨機時,隨機算法的起源數(shù)字稱為種子數(shù),在種子數(shù)的基礎(chǔ)上進行一定的交換,從而產(chǎn)生需要的隨機數(shù)字。

在實際的項目開發(fā)過程中,經(jīng)常需要產(chǎn)生一些隨機數(shù)值,例如網(wǎng)站登錄中的校驗數(shù)字等,或者需要以一定的幾率實現(xiàn)某種效果,例如游戲程序中的物品掉落等。

在Java API中,在java.util包中專門提供了一個和隨機處理有關(guān)的類,這個類就是Random類。隨機數(shù)字的生成相關(guān)的方法都包含在該類的內(nèi)部。

Random類中實現(xiàn)的隨機算法是偽隨機,也就是有規(guī)則的隨機。在進行隨機時,隨機算法的起源數(shù)字稱為種子數(shù)(seed),在種子數(shù)的基礎(chǔ)上進行一定的變換,從而產(chǎn)生需要的隨機數(shù)字。

相同種子數(shù)的Random對象,相同次數(shù)生成的隨機數(shù)字是完全相同的。也就是說,兩個種子數(shù)相同的Random對象,第一次生成的隨機數(shù)字完全相同,第二次生成的隨機數(shù)字也完全相同。這點在生成多個隨機數(shù)字時需要特別注意。

下面介紹一下Random類的使用,以及如何生成指定區(qū)間的隨機數(shù)組以及實現(xiàn)程序中要求的幾率。

1、Random對象的生成

Random類包含兩個構(gòu)造方法,下面依次進行介紹:

a、public Random()

該構(gòu)造方法使用一個和當(dāng)前系統(tǒng)時間對應(yīng)的相對時間有關(guān)的數(shù)字作為種子數(shù),然后使用這個種子數(shù)構(gòu)造Random對象。

b、public Random(long seed)

該構(gòu)造方法可以通過制定一個種子數(shù)進行創(chuàng)建。

示例代碼:

 

  1. Random r = new Random();  
  2. Random r1 = new Random(10); 

 

再次強調(diào):種子數(shù)只是隨機算法的起源數(shù)字,和生成的隨機數(shù)字的區(qū)間無關(guān)。

2、Random類中的常用方法

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

a、public boolean nextBoolean()

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

b、public double nextDouble()

該方法的作用是生成一個隨機的double值,數(shù)值介于[0,1.0)之間,這里中括號代表包含區(qū)間端點,小括號代表不包含區(qū)間端點,也就是0到1之間的隨機小數(shù),包含0而不包含1.0。

c、public int nextInt()

該方法的作用是生成一個隨機的int值,該值介于int的區(qū)間,也就是-231到231-1之間。

如果需要生成指定區(qū)間的int值,則需要進行一定的數(shù)學(xué)變換,具體可以參看下面的使用示例中的代碼。

d、public int nextInt(int n)

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

如果想生成指定區(qū)間的int值,也需要進行一定的數(shù)學(xué)變換,具體可以參看下面的使用示例中的代碼。

e、public void setSeed(long seed)

該方法的作用是重新設(shè)置Random對象中的種子數(shù)。設(shè)置完種子數(shù)以后的Random對象和相同種子數(shù)使用new關(guān)鍵字創(chuàng)建出的Random對象相同。

#p#

3、Random類使用示例

使用Random類,一般是生成指定區(qū)間的隨機數(shù)字,下面就一一介紹如何生成對應(yīng)區(qū)間的隨機數(shù)字。以下生成隨機數(shù)的代碼均使用以下Random對象r進行生成:

 

  1. Random r = new Random(); 

 

a、生成[0,1.0)區(qū)間的小數(shù)

 

  1. double d1 = r.nextDouble(); 

 

直接使用nextDouble方法獲得。

b、生成[0,5.0)區(qū)間的小數(shù)

 

  1. double d2 = r.nextDouble() * 5

 

因為nextDouble方法生成的數(shù)字區(qū)間是[0,1.0),將該區(qū)間擴大5倍即是要求的區(qū)間。

同理,生成[0,d)區(qū)間的隨機小數(shù),d為任意正的小數(shù),則只需要將nextDouble方法的返回值乘以d即可。

c、生成[1,2.5)區(qū)間的小數(shù)

 

  1. double d3 = r.nextDouble() * 1.5 + 1

 

生成[1,2.5)區(qū)間的隨機小數(shù),則只需要首先生成[0,1.5)區(qū)間的隨機數(shù)字,然后將生成的隨機數(shù)區(qū)間加1即可。

同理,生成任意非從0開始的小數(shù)區(qū)間[d1,d2)范圍的隨機數(shù)字(其中d1不等于0),則只需要首先生成[0,d2-d1)區(qū)間的隨機數(shù)字,然后將生成的隨機數(shù)字區(qū)間加上d1即可。

d、生成任意整數(shù)

 

  1. int n1 = r.nextInt(); 

 

直接使用nextInt方法即可。

e、生成[0,10)區(qū)間的整數(shù)

 

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

 

以上兩行代碼均可生成[0,10)區(qū)間的整數(shù)。

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

第二種實現(xiàn)中,首先調(diào)用nextInt()方法生成一個任意的int數(shù)字,該數(shù)字和10取余以后生成的數(shù)字區(qū)間為(-10,10),因為按照數(shù)學(xué)上的規(guī)定余數(shù)的絕對值小于除數(shù),然后再對該區(qū)間求絕對值,則得到的區(qū)間就是[0,10)了。

同理,生成任意[0,n)區(qū)間的隨機整數(shù),都可以使用如下代碼:

 

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

 

f、生成[0,10]區(qū)間的整數(shù)

 

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

 

相對于整數(shù)區(qū)間,[0,10]區(qū)間和[0,11)區(qū)間等價,所以即生成[0,11)區(qū)間的整數(shù)。

g、生成[-3,15)區(qū)間的整數(shù)

 

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

 

生成非從0開始區(qū)間的隨機整數(shù),可以參看上面非從0開始的小數(shù)區(qū)間實現(xiàn)原理的說明。

h、幾率實現(xiàn)

按照一定的幾率實現(xiàn)程序邏輯也是隨機處理可以解決的一個問題。下面以一個簡單的示例演示如何使用隨機數(shù)字實現(xiàn)幾率的邏輯。

在前面的方法介紹中,nextInt(int n)方法中生成的數(shù)字是均勻的,也就是說該區(qū)間內(nèi)部的每個數(shù)字生成的幾率是相同的。那么如果生成一個[0,100)區(qū)間的隨機整數(shù),則每個數(shù)字生成的幾率應(yīng)該是相同的,而且由于該區(qū)間中總計有100個整數(shù),所以每個數(shù)字的幾率都是1%。按照這個理論,可以實現(xiàn)程序中的幾率問題。

示例:隨機生成一個整數(shù),該整數(shù)以55%的幾率生成1,以40%的幾率生成2,以5%的幾率生成3。實現(xiàn)的代碼如下:

 

  1. int n5 = r.nextInt(100);  
  2. int m; //結(jié)果數(shù)字  
  3. if(n5 < 55){ //55個數(shù)字的區(qū)間,55%的幾率  
  4. m = 1;  
  5. }else if(n5 < 95){//[55,95),40個數(shù)字的區(qū)間,40%的幾率  
  6. m = 2;  
  7. }else{  
  8. m = 3;  

 

因為每個數(shù)字的幾率都是1%,則任意55個數(shù)字的區(qū)間的幾率就是55%,為了代碼方便書寫,這里使用[0,55)區(qū)間的所有整數(shù),后續(xù)的原理一樣。

當(dāng)然,這里的代碼可以簡化,因為幾率都是5%的倍數(shù),所以只要以5%為基礎(chǔ)來控制幾率即可,下面是簡化的代碼實現(xiàn):

 

  1. int n6 = r.nextInt(20);  
  2. int m1;  
  3. if(n6 < 11){  
  4. m1 = 1;  
  5. }else if(n6 < 19){  
  6. m1= 2;  
  7. }else{  
  8. m1 = 3;  

 

在程序內(nèi)部,幾率的邏輯就可以按照上面的說明進行實現(xiàn)。

4、其它問題

a、相同種子數(shù)Random對象問題

前面介紹過,相同種子數(shù)的Random對象,相同次數(shù)生成的隨機數(shù)字是完全相同的,下面是測試的代碼:

 

  1. Random r1 = new Random(10);  
  2. Random r2 = new Random(10);  
  3. for(int i = 0;i < 2;i++){  
  4. System.out.println(r1.nextInt());  
  5. System.out.println(r2.nextInt());  

 

在該代碼中,對象r1和r2使用的種子數(shù)都是10,則這兩個對象相同次數(shù)生成的隨機數(shù)是完全相同的。

如果想避免出現(xiàn)隨機數(shù)字相同的情況,則需要注意,無論項目中需要生成多少個隨機數(shù)字,都只使用一個Random對象即可。

b、關(guān)于Math類中的random方法

其實在Math類中也有一個random方法,該random方法的工作是生成一個[0,1.0)區(qū)間的隨機小數(shù)。

通過閱讀Math類的源代碼可以發(fā)現(xiàn),Math類中的random方法就是直接調(diào)用Random類中的nextDouble方法實現(xiàn)的。

只是random方法的調(diào)用比較簡單,所以很多程序員都習(xí)慣使用Math類的random方法來生成隨機數(shù)字。

希望對你有幫助。

【編輯推薦】

  1. 我們?yōu)槭裁匆獙W(xué)習(xí)Java Java的八大優(yōu)點
  2. 詳細介紹Java語言中的IO系統(tǒng)
  3. Java堆、棧和常量池詳解
  4. Java編程語言基礎(chǔ)JSP基本語法的詳細介紹
  5. JAVA中執(zhí)行DOS命令分析
責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2021-03-29 10:00:32

Java基礎(chǔ)Random類Random

2016-08-31 16:07:54

Python實例

2009-12-01 17:07:44

PHP類Snoopy

2009-05-21 13:25:50

.NETCountDownLa微軟

2012-11-06 10:19:18

Java自定義加載Java類

2020-10-30 08:35:23

Java Virtua

2021-10-12 17:19:17

Random局限性變量

2012-02-22 14:14:43

Java

2023-10-31 16:00:51

類加載機制Java

2009-11-06 13:25:35

Visual Stud

2020-06-29 07:52:17

Java工具類開發(fā)

2021-04-22 09:57:37

Random方法游戲

2024-05-15 09:09:49

2011-05-16 15:49:58

JAVA

2009-05-18 13:07:44

類隱藏Java關(guān)鍵字

2009-09-29 16:46:01

創(chuàng)建Hibernate

2009-11-06 11:16:17

Visual Stud

2009-06-11 15:25:39

Java隨機數(shù)

2021-11-01 23:55:09

Java接口密封類

2009-06-12 13:19:55

Java類的組成Java教程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 最新毛片网站 | 91精品久久久久 | 91精品国产一区二区三区蜜臀 | 久久久久久精 | 国产一区| 中文在线播放 | 国产欧美在线 | 91在线免费视频 | 欧美电影免费网站 | 日韩精品在线观看视频 | 亚洲成人av | 亚洲精品欧美一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 久久一区二区三区四区 | 欧美xxxx色视频在线观看免费 | 欧美激情精品久久久久 | 精品国产99 | 欧美 日韩 国产 在线 | 国产男女猛烈无遮掩视频免费网站 | 日韩成人在线电影 | av在线电影网 | 国产精品久久久久久久午夜片 | 亚洲风情在线观看 | 中文字幕av亚洲精品一部二部 | 一区二区三区精品视频 | 久久久久久亚洲 | 成人免费看片网 | 成人三级在线观看 | 毛片.com | 成人免费视频网站在线看 | 亚州中文| 日韩视频一区二区三区 | 综合久久综合久久 | 81精品国产乱码久久久久久 | 久久国产精品91 | 国产精品永久在线观看 | 91国在线视频 | 亚洲人在线 | 成人精品国产 | 成年女人免费v片 | 操久久 |