JavaSE API實(shí)現(xiàn)生成隨機(jī)數(shù)的2種方法(Random類和Math類的Random方法)
生成隨機(jī)數(shù)的兩種方法
Random類和Math類的random方法都可以用來生成隨機(jī)數(shù)
而Math類的random方法則是基于系統(tǒng)時(shí)間的偽隨機(jī)數(shù)生成器,大于等于0.0小于1.0的隨機(jī)double值范圍[0,1)。例如: double num1 = Math.random() * 5 + 4;//范圍[4,9)
Random類是基于種子的偽隨機(jī)數(shù)生成器,有含參數(shù)和不含參數(shù)兩種構(gòu)造方式,不含參數(shù)的構(gòu)造方法每次都使用當(dāng)前系統(tǒng)時(shí)間作為種子,而含餐構(gòu)造是使用一個(gè)固定值(參數(shù)n)作為種子范圍[0,n)。例如:Random rd1 = new Random(); double num2 = rd1.nextDouble(); Random rd2 = new Random(10); double num3 = rd2.nextDouble();
Math.random() 無參調(diào)用,返回值為 double,大于等于 0.0 ,小于 1.0。范圍[0.0,1.0)
static double random?() 返回值為 double的正值,大于等于 0.0 ,小于 1.0 。
double randomDouble = Math.random(); // 生成[0,1)之間的隨機(jī)小數(shù) int randomNumber = (int) (2 + Math.random() * 101); // 生成[2,103)之間的隨機(jī)整數(shù)
Random類對象的next()方法,可有參。從這個(gè)隨機(jī)數(shù)生成器的序列返回下一個(gè)偽隨機(jī)數(shù),均勻分布的 int值。
protected int next?(int bits) 生成下一個(gè)偽隨機(jī)數(shù)。
boolean nextBoolean?() 從該隨機(jī)數(shù)生成器的序列返回下一個(gè)偽隨機(jī)數(shù),均勻分布的 boolean值。
void nextBytes?(byte[] bytes) 生成隨機(jī)字節(jié)并將它們放入用戶提供的字節(jié)數(shù)組中。
double nextDouble?() 返回下一個(gè)偽,均勻分布 double之間價(jià)值 0.0和 1.0從這個(gè)隨機(jī)數(shù)生成器的序列。
float nextFloat?() 返回下一個(gè)偽,均勻分布 float之間價(jià)值 0.0和 1.0從這個(gè)隨機(jī)數(shù)生成器的序列。
double nextGaussian?() 從該隨機(jī)數(shù)發(fā)生器的序列返回下一個(gè)偽隨機(jī)數(shù),高斯(“正”)分布的 double值,平均值為 0.0 ,標(biāo)準(zhǔn)偏差為 1.0 。
int nextInt?() 從這個(gè)隨機(jī)數(shù)生成器的序列返回下一個(gè)偽隨機(jī)數(shù),均勻分布的 int值。
int nextInt?(int bound) 返回偽隨機(jī)的,均勻分布 int值介于0(含)和指定值(不包括),從該隨機(jī)數(shù)生成器的序列繪制。
long nextLong?() 返回下一個(gè)偽隨機(jī)數(shù),從這個(gè)隨機(jī)數(shù)發(fā)生器的序列中均勻分布 long值。
public static void main(String[] args) { //測試一下生成隨機(jī)數(shù)的兩種方法 int i = 0; for (i = 0; i < 10000; i++) { System.out.println("====================================="); double numDouble1 = Math.random(); int numInt1 = (int)(Math.random()*(10)); System.out.println("Math.random的隨機(jī)浮點(diǎn)數(shù)[0.0,1.0):" + numDouble1); System.out.println("Math.random的隨機(jī)整數(shù)[0,9]" + numInt1); System.out.println("---------------------------------------"); Random rd = new Random(); double numDouble2 = rd.nextDouble(); int numInt2 = rd.nextInt(); int numInt3 = rd.nextInt(); int numInt4 = rd.nextInt(4); int numInt5 = rd.nextInt(4); System.out.println("Random對象的無參隨機(jī)浮點(diǎn)數(shù)[0.0,1.0]:" + numDouble2);//不知道邊界情況,沒人說過,只說之間。不管了,反正都用Math類 System.out.println("Random對象的無參隨機(jī)整數(shù)[-整數(shù),整數(shù)]:" + numInt2 + "," + numInt3); System.out.println("Random對象的參數(shù)構(gòu)造[0,4):" + numInt5 + "," + numInt4); } System.out.println("執(zhí)行" + i + "次"); } }
Random有參構(gòu)造后,調(diào)用方法生成隨機(jī)數(shù),數(shù)完全相同
只要Random構(gòu)造的參數(shù)固定,生成的隨機(jī)數(shù)也固定,完全不隨機(jī)。不推薦使用
System.out.println("--------------------------------------"); Random rd1 = new Random(10); double numDouble3 = rd1.nextDouble(); Random rd2 = new Random(10); double numDouble4 = rd2.nextDouble(); System.out.println("參數(shù)10的Random對象生成的隨機(jī)浮點(diǎn)數(shù)" + numDouble3 + "," + numDouble4);//因?yàn)榉N子相同,所以生成的數(shù)也相同 System.out.println("參數(shù)10的Random對象生成的隨機(jī)整數(shù)[0,5):" + numInt6 );
其中三次運(yùn)行結(jié)果
===================================== Math.random的隨機(jī)浮點(diǎn)數(shù)[0.0,1.0):0.7142916697602802 Math.random的隨機(jī)整數(shù)[0,9]:6 --------------------------------------- Random對象的無參隨機(jī)浮點(diǎn)數(shù)[0.0,1.0]:0.6315568322991557 Random對象的無參隨機(jī)整數(shù)[-整數(shù),整數(shù)]:73848388,929911462 Random對象的參數(shù)構(gòu)造[0,4):0,0 -------------------------------------- 參數(shù)10的Random對象生成的隨機(jī)浮點(diǎn)數(shù):0.7304302967434272,0.7304302967434272 參數(shù)10的Random對象生成的隨機(jī)整數(shù)[0,5):3 ===================================== Math.random的隨機(jī)浮點(diǎn)數(shù)[0.0,1.0):0.6622105346737387 Math.random的隨機(jī)整數(shù)[0,9]:4 --------------------------------------- Random對象的無參隨機(jī)浮點(diǎn)數(shù)[0.0,1.0]:0.7790519044760864 Random對象的無參隨機(jī)整數(shù)[-整數(shù),整數(shù)]:-1185189383,-718067040 Random對象的參數(shù)構(gòu)造[0,4):2,2 -------------------------------------- 參數(shù)10的Random對象生成的隨機(jī)浮點(diǎn)數(shù):0.7304302967434272,0.7304302967434272 參數(shù)10的Random對象生成的隨機(jī)整數(shù)[0,5):3 ===================================== Math.random的隨機(jī)浮點(diǎn)數(shù)[0.0,1.0):0.4240920821616745 Math.random的隨機(jī)整數(shù)[0,9]:8 --------------------------------------- Random對象的無參隨機(jī)浮點(diǎn)數(shù)[0.0,1.0]:0.36926846454559725 Random對象的無參隨機(jī)整數(shù)[-整數(shù),整數(shù)]:1829129943,120476504 Random對象的參數(shù)構(gòu)造[0,4):2,0 -------------------------------------- 參數(shù)10的Random對象生成的隨機(jī)浮點(diǎn)數(shù):0.7304302967434272,0.7304302967434272 參數(shù)10的Random對象生成的隨機(jī)整數(shù)[0,5):3
總結(jié):
1.Math.random方法明確范圍[0,1)
2.Random類無參構(gòu)造時(shí),無參調(diào)用方法生成隨機(jī)數(shù)都為該類型數(shù)的范圍,但如double為0.0~1.0之間但不清楚邊界包含情況,慎用
3.Random類有參構(gòu)造時(shí),若參數(shù)固定,不管有參還是無參調(diào)用方法得到的數(shù)都相同如
Random rd2 = new Random(10); double numDouble4 = rd2.nextDouble();//循環(huán)多少次都固定產(chǎn)生0.7304302967434272 int numInt6 = rd2.nextInt(5);//固定產(chǎn)生3
到此這篇關(guān)于JavaSE API實(shí)現(xiàn)生成隨機(jī)數(shù)的2種方法(Random類和Math類的Random方法)的文章就介紹到這了,更多相關(guān)JavaSE 生成隨機(jī)數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中LocalDate的詳細(xì)方法舉例總結(jié)
這篇文章主要給大家介紹了關(guān)于Java中LocalDate詳細(xì)方法舉例的相關(guān)資料,LocalDate主要是用來處理日期的類,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09基于springboot+vue實(shí)現(xiàn)垃圾分類管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于springboot+vue實(shí)現(xiàn)垃圾分類管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07SpringSecurity安全框架在SpringBoot框架中的使用詳解
在Spring?Boot框架中,Spring?Security是一個(gè)非常重要的組件,它可以幫助我們實(shí)現(xiàn)應(yīng)用程序的安全性,本文將詳細(xì)介紹Spring?Security在Spring?Boot框架中的使用,包括如何配置Spring?Security、如何實(shí)現(xiàn)身份驗(yàn)證和授權(quán)、如何防止攻擊等2023-06-06