java的三種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法
隨機(jī)數(shù)的產(chǎn)生在一些代碼中很常用,也是我們必須要掌握的。而java中產(chǎn)生隨機(jī)數(shù)的方法主要有三種:
- 第一種:new Random()
- 第二種:Math.random()
- 第三種:currentTimeMillis()
第一種需要借助java.util.Random類(lèi)來(lái)產(chǎn)生一個(gè)隨機(jī)數(shù)發(fā)生器,也是最常用的一種,構(gòu)造函數(shù)有兩個(gè),Random()和Random(long seed)。第一個(gè)就是以當(dāng)前時(shí)間為默認(rèn)種子,第二個(gè)是以指定的種子值進(jìn)行。產(chǎn)生之后,借助不同的語(yǔ)句產(chǎn)生不同類(lèi)型的數(shù)。
種子就是產(chǎn)生隨機(jī)數(shù)的第一次使用值,機(jī)制是通過(guò)一個(gè)函數(shù),將這個(gè)種子的值轉(zhuǎn)化為隨機(jī)數(shù)空間中的某一個(gè)點(diǎn)上,并且產(chǎn)生的隨機(jī)數(shù)均勻的散布在空間中。以后產(chǎn)生的隨機(jī)數(shù)都與前一個(gè)隨機(jī)數(shù)有關(guān)。以代碼為例。
public static void main(String[] args)
{
Random r = new Random(1);
for(int i=0 ; i<5 ; i++)
{
int ran1 = r.nextInt(100);
System.out.println(ran1);
}
}
在我的編譯器下產(chǎn)生的五個(gè)數(shù)均為85,88,47,13,54,如果采用Random r = new Random(),產(chǎn)生的隨機(jī)數(shù)就不同,這就是確定種子導(dǎo)致的結(jié)果。
而第二種方法返回的數(shù)值是[0.0,1.0)的double型數(shù)值,由于double類(lèi)數(shù)的精度很高,可以在一定程度下看做隨機(jī)數(shù),借助(int)來(lái)進(jìn)行類(lèi)型轉(zhuǎn)換就可以得到整數(shù)隨機(jī)數(shù)了,代碼如下。
public static void main(String[] args)
{
int max=100,min=1;
int ran2 = (int) (Math.random()*(max-min)+min);
System.out.println(ran2);
}
至于第三種方法雖然不常用,但是也是一種思路。方法返回從1970年1月1日0時(shí)0分0秒(這與UNIX系統(tǒng)有關(guān))到現(xiàn)在的一個(gè)long型的毫秒數(shù),取模之后即可得到所需范圍內(nèi)的隨機(jī)數(shù)。
public static void main(String[] args)
{
int max=100,min=1;
long randomNum = System.currentTimeMillis();
int ran3 = (int) (randomNum%(max-min)+min);
System.out.println(ran3);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計(jì)示例
本篇文章主要介紹了基于Spring Data Jest的Elasticsearch數(shù)據(jù)統(tǒng)計(jì)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
SpringCloud整合Nacos實(shí)現(xiàn)流程詳解
這篇文章主要介紹了SpringCloud整合Nacos實(shí)現(xiàn)流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
詳解SpringBoot AOP 攔截器(Aspect注解方式)
這篇文章主要介紹了詳解SpringBoot AOP 攔截器 Aspect,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
JVM核心教程之JVM運(yùn)行與類(lèi)加載全過(guò)程詳解
我們都知道一個(gè)java程序運(yùn)行要經(jīng)過(guò)編譯和執(zhí)行,但是這太概括了,中間還有很多步驟,下面這篇文章主要給大家介紹了關(guān)于JVM核心教程之JVM運(yùn)行與類(lèi)加載全過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2018-04-04
spring boot啟動(dòng)后直接關(guān)閉了的問(wèn)題解決
本文主要介紹了spring boot啟動(dòng)后直接關(guān)閉了的問(wèn)題解決,SpringBoot項(xiàng)目啟動(dòng)后自動(dòng)關(guān)閉的原因是未引入web依賴(lài),導(dǎo)致以普通Java項(xiàng)目運(yùn)行,下面就來(lái)介紹一下解決方法,感興趣的可以了解一下2025-02-02
Java基礎(chǔ)學(xué)習(xí)之方法的重載知識(shí)總結(jié)
今天帶大家來(lái)回顧Java基礎(chǔ)知識(shí),文中對(duì)Java方法的重載相關(guān)知識(shí)作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
詳解Spring Boot應(yīng)用的啟動(dòng)和停止(start啟動(dòng))
這篇文章主要介紹了詳解Spring Boot應(yīng)用的啟動(dòng)和停止(start啟動(dòng)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

