溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java的三種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法

發(fā)布時(shí)間:2020-09-21 10:30:29 來(lái)源:腳本之家 閱讀:141 作者:zxxxxxxxxxxxz 欄目:編程語(yǔ)言

隨機(jī)數(shù)的產(chǎn)生在一些代碼中很常用,也是我們必須要掌握的。而java中產(chǎn)生隨機(jī)數(shù)的方法主要有三種:

  • 第一種:new Random()
  • 第二種:Math.random()
  • 第三種:currentTimeMillis()

第一種需要借助java.util.Random類來(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)生不同類型的數(shù)。

種子就是產(chǎn)生隨機(jī)數(shù)的第一次使用值,機(jī)制是通過一個(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類數(shù)的精度很高,可以在一定程度下看做隨機(jī)數(shù),借助(int)來(lái)進(jìn)行類型轉(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í)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI