亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Random類 (java.util)

2019-11-11 04:04:32
字體:
來源:轉載
供稿:網友

本文轉自:點擊打開鏈接

Random類 (java.util)         

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

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

下面介紹一下Random類的使用,以及如何生成指定區間的隨機數組以及實現程序中要求的幾率。

1、Random對象的生成

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

         a、public Random()

該構造方法使用一個和當前系統時間對應的相對時間有關的數字作為種子數,然后使用這個種子數構造Random對象。

         b、public Random(long seed)

該構造方法可以通過制定一個種子數進行創建。

示例代碼:

Random r = new Random();

Random r1 = new Random(10);

再次強調:種子數只是隨機算法的起源數字,和生成的隨機數字的區間無關。

2、Random類中的常用方法

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

a、public boolean nextBoolean()

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

b、public double nextDouble()

該方法的作用是生成一個隨機的double值,數值介于[0,1.0)之間。

c、public int nextInt()

該方法的作用是生成一個隨機的int值,該值介于int的區間,也就是-231到231-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)區間的小數

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

生成[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;

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

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

h、幾率實現

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

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

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

int n5 = r.nextInt(100);

int m; //結果數字

if(n5 < 55){ //55個數字的區間,55%的幾率

m = 1;

}else if(n5 < 95){//[55,95),40個數字的區間,40%的幾率

m = 2;

}else{

m = 3;

}

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

當然,這里的代碼可以簡化,因為幾率都是5%的倍數,所以只要以5%為基礎來控制幾率即可,下面是簡化的代碼實現:

         int n6 = r.nextInt(20);

              int m1;

              if(n6 < 11){

                       m1 = 1;

              }else if(n6 < 19){

                       m1= 2;

              }else{

                       m1 = 3;

              }

     在程序內部,幾率的邏輯就可以按照上面的說明進行實現。

4、其它問題

a、相同種子數Random對象問題

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

                            Random r1 = new Random(10);

                            Random r2 = new Random(10);

                            for(int i = 0;i < 2;i++){

                                     System.out.PRintln(r1.nextInt());

                                     System.out.println(r2.nextInt());

                            }

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

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

b、關于Math類中的random方法

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

通過閱讀Math類的源代碼可以發現,Math類中的random方法就是直接調用Random類中的nextDouble方法實現的。

只是random方法的調用比較簡單,所以很多程序員都習慣使用Math類的random方法來生成隨機數字。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品无av码在线观看| 成人做爽爽免费视频| 欧美一性一乱一交一视频| 九九久久综合网站| 亚洲精品第一国产综合精品| 亚洲无av在线中文字幕| 一区二区三区视频免费| 日韩69视频在线观看| 精品久久香蕉国产线看观看亚洲| 欧美精品日韩www.p站| 亚洲人成啪啪网站| 热久久免费国产视频| 最近2019中文字幕mv免费看| 久久九九国产精品怡红院| 日韩经典中文字幕在线观看| 91免费版网站入口| 欧美在线国产精品| 国产视频欧美视频| 国产欧美精品在线播放| 欧美性受xxxx黑人猛交| 7777免费精品视频| 久久深夜福利免费观看| 国内成人精品视频| 欧美色视频日本高清在线观看| 成人国产精品一区| 欧美日韩国产91| 亚洲电影免费观看高清完整版| 欧美精品videosex性欧美| 欧美亚洲国产成人精品| 亚洲国产欧美精品| 欧美亚洲国产另类| 亚洲一区二区黄| 亚洲美女福利视频网站| 亚洲成人中文字幕| 亚洲国产精品一区二区三区| 狠狠躁夜夜躁人人爽天天天天97| 成人妇女淫片aaaa视频| 亚洲欧美日韩国产中文专区| 亚洲视频777| 国产亚洲精品成人av久久ww| 欧美成人性生活| 欧美精品少妇videofree| 欧美在线免费视频| 亚洲va码欧洲m码| 国产欧美日韩丝袜精品一区| 欧美肥婆姓交大片| 韩日精品中文字幕| 亚洲美女激情视频| 亚洲欧美日韩第一区| 中文字幕最新精品| 亚洲国产成人精品久久| 国产精品视频午夜| 亚洲四色影视在线观看| 久久天天躁狠狠躁老女人| 在线视频亚洲欧美| y97精品国产97久久久久久| 久久久久在线观看| 亚洲成色777777在线观看影院| 亚洲美女中文字幕| 亚洲欧美日韩国产精品| 欧美在线观看网址综合| 欧美午夜影院在线视频| 成人h视频在线观看播放| 亚洲人精选亚洲人成在线| 亚洲va久久久噜噜噜久久天堂| 欧美激情亚洲自拍| 中文字幕亚洲一区二区三区| 亚洲激情在线视频| 欧美激情一二区| 久久久日本电影| 亚洲女人初尝黑人巨大| 欧美三级欧美成人高清www| 日韩在线视频网| 日韩在线激情视频| 亚洲国产天堂久久综合| 精品自在线视频| 日韩av手机在线观看| 中文国产亚洲喷潮| 久久久91精品国产一区不卡| 精品成人久久av| 国产在线精品一区免费香蕉| 欧美日韩xxxxx| 日韩精品中文字幕在线观看| 欧美xxxx14xxxxx性爽| 国产成人精品a视频一区www| 国产精品亚洲一区二区三区| 国产99久久精品一区二区永久免费| 国产精品网红福利| 欧美最猛性xxxxx亚洲精品| 日韩电影免费观看在线观看| 欧美综合国产精品久久丁香| 亚洲美腿欧美激情另类| 国内精品一区二区三区| 日韩中文av在线| 亚洲欧美日韩天堂| 国产成人精品一区二区| 久久久久久999| 国产精品色婷婷视频| 欧美性感美女h网站在线观看免费| 久久久亚洲网站| 欧美高清电影在线看| 国产精品电影观看| 久久久久久久久久久91| 国产成人精品免费久久久久| 国产亚洲精品美女| 国产精品久久久久久久久久ktv| 精品国产一区二区三区久久| 日韩精品中文字| 成人网在线视频| 久久久国产一区二区三区| 欧美精品电影在线| 久久天天躁夜夜躁狠狠躁2022| 中国china体内裑精亚洲片| 日韩视频亚洲视频| 亚洲精品一区av在线播放| 性欧美暴力猛交69hd| 欧美激情国内偷拍| 精品国产老师黑色丝袜高跟鞋| 国内精品久久久久影院 日本资源| 日本成人精品在线| 欧美日韩国产综合视频在线观看中文| 国产成人精品一区二区| 自拍偷拍亚洲一区| 日韩欧美在线视频| 在线观看国产精品日韩av| 亚洲激情第一页| 亚洲最大的网站| 国产精品久久久亚洲| 国产精品久久久久久av福利| 热久久免费视频精品| 插插插亚洲综合网| 亚洲国产精品成人va在线观看| 欧美性xxxx极品高清hd直播| 日韩美女免费视频| 亚洲第一视频在线观看| 日韩av影院在线观看| 久久久久久久久久久国产| 日韩av在线资源| 亚洲最大的免费| 黄网动漫久久久| 久久色在线播放| 久久久精品亚洲| 欧美色播在线播放| 国产999视频| 国产精品69久久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 日韩中文字在线| 日本高清不卡的在线| 国产suv精品一区二区| 精品免费在线观看| 国产成人+综合亚洲+天堂| 日产精品久久久一区二区福利| 亚洲理论片在线观看| 国产一区二区三区三区在线观看| 国产精品69久久| 久久亚洲一区二区三区四区五区高| 亚洲第一中文字幕| 影音先锋欧美在线资源| 欧美国产激情18| 欧美午夜精品在线| 欧美性猛交xxxxx水多| 亚洲精品国产精品国自产在线| 超碰97人人做人人爱少妇| 亚洲精品福利在线观看|