黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 常見(jiàn)問(wèn)題 java Random怎么用

java Random怎么用

更新時(shí)間:2019-08-01 17:40:10 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2379次

    Random類(lèi) (java.util)

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

  相同種子數(shù)的Random對(duì)象,相同次數(shù)生成的隨機(jī)數(shù)字是完全相同的。也就是說(shuō),兩個(gè)種子數(shù)相同的Random對(duì)象,第一次生成的隨機(jī)數(shù)字完全相同,第二次生成的隨機(jī)數(shù)字也完全相同。這點(diǎn)在生成多個(gè)隨機(jī)數(shù)字時(shí)需要特別注意。

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

  1、Random對(duì)象的生成

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

  a、public Random()

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

  b、public Random(long seed)

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

  示例代碼:

  Random r = new Random();

  Random r1 = new Random(10);

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

  2、Random類(lèi)中的常用方法

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

  a、public boolean nextBoolean()

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

  b、public double nextDouble()

  該方法的作用是生成一個(gè)隨機(jī)的double值,數(shù)值介于[0,1.0)之間。

  c、public int nextInt()

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

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

  d、public int nextInt(int n)

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

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

  e、public void setSeed(long seed)

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

  3、Random類(lèi)使用示例

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

  Random r = new Random();

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

  double d1 = r.nextDouble();

  直接使用nextDouble方法獲得。

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

  double d2 = r.nextDouble() * 5;

  因?yàn)閚extDouble方法生成的數(shù)字區(qū)間是[0,1.0),將該區(qū)間擴(kuò)大5倍即是要求的區(qū)間。

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

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

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

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

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

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

  int n1 = r.nextInt();

  直接使用nextInt方法即可。

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

  int n2 = r.nextInt(10);

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

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

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

  第二種實(shí)現(xiàn)中,首先調(diào)用nextInt()方法生成一個(gè)任意的int數(shù)字,該數(shù)字和10取余以后生成的數(shù)字區(qū)間為(-10,10),然后再對(duì)該區(qū)間求絕對(duì)值,則得到的區(qū)間就是[0,10)了。

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

  int n2 = r.nextInt(n);

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

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

  int n3 = r.nextInt(11);

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

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

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

  int n4 = r.nextInt(18) - 3;

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

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

  h、幾率實(shí)現(xiàn)

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

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

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

  int n5 = r.nextInt(100);

  int m; //結(jié)果數(shù)字

  if(n5 < 55){ //55個(gè)數(shù)字的區(qū)間,55%的幾率

  m = 1;

  }else if(n5 < 95){//[55,95),40個(gè)數(shù)字的區(qū)間,40%的幾率

  m = 2;

  }else{

  m = 3;

  }

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

  當(dāng)然,這里的代碼可以簡(jiǎn)化,因?yàn)閹茁识际?%的倍數(shù),所以只要以5%為基礎(chǔ)來(lái)控制幾率即可,下面是簡(jiǎn)化的代碼實(shí)現(xiàn):

  int n6 = r.nextInt(20);

  int m1;

  if(n6 < 11){

  m1 = 1;

  }else if(n6 < 19){

  m1= 2;

  }else{

  m1 = 3;

  }

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

  4、其它問(wèn)題

  a、相同種子數(shù)Random對(duì)象問(wèn)題

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

  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());

  }

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

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

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

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

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

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

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产在线麻豆波多野结衣 | 一级成人黄色片 | 一级特黄国产高清毛片97看片 | 成人永久福利免费观看 | 日本精品一区二区 | 天干天干夜天干天天爽 | 日韩二区 | 国产精品400部自产在线观看 | 国产成人精品综合网站 | 好吊日在线 | 免费看黄片毛片 | 亚欧成人乱码一区二区 | 亚洲 欧美 日韩 综合 | 可以免费观看的黄色网址 | 午夜私人 | 日韩 欧美 综合 | 毛片又大又粗又长又硬 | 色五夜 | 全部免费的毛片视频观看 | 97色噜噜刺激有声小说 | 免费高清在线观看a网站 | 天天操女人 | 天天摸天天舔天天操 | 国产成人免费永久播放视频平台 | 免费午夜影院 | 亚洲免费中文字幕 | 最近的中文字幕大全免费8 最近的中文字幕2019更新 | 一区二区高清视频在线观看 | 欧美成人网在线综合视频 | 三级经典三级日本三级欧美 | 2018天天爽天天玩天天拍 | 国内精品福利在线视频 | 欧美成人乱弄视频 | 久草中文在线观看 | 国产一区二区三区免费 | 在线中文字幕播放 | 一级黄色毛片播放 | 嗯灬啊灬用力再用力ca视频 | 51短视频版在线观看www免费 | 在线观看亚洲一区 | 欧美在线一级精品 |