日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java随机函数

發(fā)布時間:2023/12/16 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java随机函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Java有三種獲取隨機數(shù)的方法

一. java.util.Random包下的Random類,通過new一個Random對象來產(chǎn)生隨機數(shù)。

二. Math.random()方法,產(chǎn)生的隨機數(shù)是[0,1)之間的一個double數(shù)。

三.?System.currentTimeMillis(),該方法返回從1970年1月1號0點0分0秒到現(xiàn)在的毫秒數(shù),返回值為long。



Random類

Random類有兩種構(gòu)造方法:帶種子和不帶種子。

不帶種子:

每次運行結(jié)果不一樣。默認(rèn)種子為System.currentTimeMillis(),即系統(tǒng)時間作為seed。因為時間一直在改變所以種子也在變。

Random() rdm = new Random();?

//Random() rdm = new Random(System.currentTimeMillis());


帶種子:

每次運行結(jié)果都一樣。相同種子的運行結(jié)果一樣。

Random rdm = new Random(100);


Random類中的8種方法


rdm.nextInt() //返回int取值范圍內(nèi)的偽隨機數(shù),[2147483648 , 2147483647]

rdm.nextInt(n) //返回0~n的偽隨機數(shù),[0 , n)

rdm.nextLong()//返回long取值范圍內(nèi)的偽隨機數(shù),[-(2^63-1) , 2^63]

rdm.nextDouble() //返回double類型的偽隨機數(shù),[0.0 , 1.0)

rdm.nextFloat() //返回float類型的偽隨機數(shù),[0.0 , 1.0)

rdm.nextBytes(bytes)//用隨機數(shù)填充指定字節(jié)數(shù)組的元素

rdm.nextBoolean()//返回true或false

rdm.nextGaussian()//返回高斯/正態(tài)分布


接下來對以上方法進行測試

import java.util.Random;public class TestRandom2 {public static void main(String[] args) {Random rdm1 = new Random();//不帶種子Random rdm2 = new Random(100);//帶種子Random rdm3 = new Random(100);//與rdm2帶一樣的種子byte[] data = new byte[3];//用隨機數(shù)填充data數(shù)組rdm1.nextBytes(data);for(int i=0;i<3;i++){System.out.println("不帶種子的nextInt(): "+rdm1.nextInt());}System.out.println();for(int i=0;i<3;i++){System.out.println("不帶種子的nextInt(10): "+rdm1.nextInt(10)+",");}System.out.println();for(int i=0;i<3;i++){System.out.println("rdm2帶種子數(shù)100: "+rdm2.nextInt(10));}System.out.println();for(int i=0;i<3;i++){System.out.println("rdm3帶種子數(shù)100: "+rdm3.nextInt(10));}System.out.println();System.out.println("nextLong(): "+rdm1.nextLong());System.out.println("nextDouble(): "+rdm1.nextDouble());System.out.println("nextFloat(): "+rdm1.nextFloat());System.out.println("nextGaussian(): "+rdm1.nextGaussian());System.out.println("nextBoolean(): "+rdm1.nextBoolean());System.out.print("nextBytes(bytes): ");for(int i=0;i<3;i++){System.out.print(data[i]+" ");}} }


第一次運行結(jié)果


第二次運行結(jié)果


可以看出帶種子的構(gòu)造方法,兩次運行結(jié)果是一樣的。種子數(shù)相同運行結(jié)果也是一樣的。

不帶種子的兩次運行結(jié)果則不同。



Math.random()

產(chǎn)生[0,1)之間的double類型隨機數(shù)
Math.random()*n>>>[0,n)之間的隨機數(shù) (int)(Math.random()*n)>>>[0,n)之間的隨機整數(shù) ?//int后面的()不能缺,否則會先強制轉(zhuǎn)換Math.random()
Math.round(Math.random()*(MAX-MIN)+MIN)>>>[MIN,MAX]//Math.round()可以暫時理解為四舍五入函數(shù)
進行測試 double temp1;int temp2;long temp3;System.out.print("[0,1): ");for(int i=0;i<3;i++){temp1=Math.random();System.out.print(temp1+" ");}System.out.println();System.out.print("[0,9]: ");for(int i=0;i<3;i++){temp2=(int) (Math.random()*10);System.out.print(temp2+" ");}System.out.println();System.out.print("[0,10]: ");for(int i=0;i<3;i++){//Math.round 四舍五入函數(shù)(負(fù)數(shù)的話小數(shù)等于5時不進位,-1.5=-1)temp3=Math.round(Math.random()*9+1);System.out.print(temp3+" ");}

運行結(jié)果




System.currentTimeMillis()

返回當(dāng)前的系統(tǒng)時間,返回值為long
temp=System.currentTimeMillis()%100; //對系統(tǒng)時間取模,返回[0,99]之間的隨機整數(shù)

此方法有個很大的缺陷,當(dāng)兩次取值的時間間隔非常小時,取出的值是相同的。 因此我們需要在循環(huán)中加入sleep。
進行測試 long r1,r2;System.out.print("返回當(dāng)前毫秒數(shù): ");for(int i=0;i<3;i++){r1 = System.currentTimeMillis();System.out.print(r1+" ");}System.out.println();System.out.print("加入sleep(): ");for(int i=0;i<3;i++){r1=System.currentTimeMillis();System.out.print(r1+" ");try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println();//對系統(tǒng)時間進行模運算System.out.print("一百以內(nèi)隨機數(shù): ");for(int i=0;i<3;i++){r2=System.currentTimeMillis()%100;System.out.print(r2+" ");}System.out.println();//sleep后的模運算System.out.print("加入sleep(): ");for(int i=0;i<3;i++){r2=System.currentTimeMillis()%100;System.out.print(r2+" ");try {Thread.sleep(70);} catch (InterruptedException e) {e.printStackTrace();}}

運行結(jié)果



總結(jié)

以上是生活随笔為你收集整理的Java随机函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。