五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > java隨機數(shù)獲取的方法(Math.random/ran:Random)

java隨機數(shù)獲取的方法(Math.random/ran:Random)

文章來源:365jz.com     點擊數(shù):890    更新時間:2018-05-31 20:13   參與評論

Math類和Random類生成的隨機數(shù)

一、Math類的random()方法


Math類的random()方法可以生成大于等于0.0、小于1.0的double型隨機數(shù)。

Math.random()方法語句基礎(chǔ)上處理可獲得多種類型、或任意范圍的隨機數(shù)。

公式:

int num=(int)(Math.random()*n);         //返回大于等于0小于n之間的隨機數(shù) 
int num0=m+(int)(Matn.randon()*n);      //返回大于等于m小于m+n(不包括m+n)之間的隨機數(shù) 


例如:我們需要取2~22之間的偶數(shù)

public class MathRandomDemo{ 
public static int GetevenNum(double num1,double num2){ 
int s=(int)num1+(int)(Math.random()*(num2-num1)); 
if(s%2==0){ 
return s; 

else 
retuen s+!; 

public static void main(String[] args){ 
System.out.println("任意一個"+num1+"~"+num2+"之間的偶數(shù):"+GeteneNum(2,22)); 


還可以隨機生成字符

例如:

1.隨機生成a~z之間的字符

(char)('a'+Math.random()*('z'-'a'+1));

2.隨機生成cha1~cha2的字符

(char)(cha1+Math.random()*(cha2-cha1+1));


二、Random類生成隨機數(shù)

除了Math類的Random()方法可以獲取隨機數(shù)之外,還可以Java.util.Random類,可以通過實例化一個Random對象創(chuàng)建一個隨機數(shù)生成器。

1.語法:

Random ran=new Random(); 


ran:Random類的實例對象

以這種形式實例化對象時,Java編譯器以系統(tǒng)當(dāng)前時間作為隨機數(shù)生成器的種子,因為每時每刻的時間都不可能相同,所以產(chǎn)生的隨機數(shù)也不同。如果運行速度太快,也會產(chǎn)生兩次運行結(jié)果相同的隨機數(shù)。



2.可以在實例化Random類對象時,自定義隨機數(shù)生成器的種子。

語法:

Random ran=new Random(seedValue); 


ran:Random類的實例對象

seedValue:隨機類生成器的種子。

Random類中還提供各種類型隨機數(shù)的方法: 
nextInt():返回一個隨機整數(shù)(int) 
nextInt(int n):返回大于等于0、小于n的隨機整數(shù)(int) 
nextLong():返回一個隨機長整型值(long) 
nextBoolean():返回一個隨機布爾型值(boolean) 
nextFloat():返回一個隨機浮點型值(float) 
nextDouble():返回一個隨機雙精度型值(double) 
nextGaussian():概率密度為高斯分布的雙精度值(double) 


例:

import java.util.Random; 
public class Demo{ 
public static void main(String[] args){ 
Random ran=new Random(); 
System.out.println("產(chǎn)生一個隨機整數(shù):"+ran.nextlnt()); 

}  



如果要獲得區(qū)間 [1~100]的隨機數(shù),該怎么辦呢?稍微動動腦筋就可以想到:區(qū)間 [0, 100) 內(nèi)的整數(shù),實際上就是區(qū)間 [0, 99]。因為最大邊界為100,可惜不能等于100,因此最大可能產(chǎn)生的“整數(shù)”就是99。

既然rand.nextInt(100) 獲得的值是區(qū)間 [0, 99],那么在這個區(qū)間左右各加 1,就得到了區(qū)間 [1, 100]。因此,代碼寫成:

rand.nextInt(100)+ 1;

即可。運行下面的代碼,將獲得 [1, 100] 的 10 個取值。

import java.util.Random; 
public class Test { 
    public static void main(String[] args){ 
      Random rand = new Random(); 
      for(int i=0; i<10; i++) { 
       System.out.println(rand.nextInt(100) + 1); 
      } 
    } 

同理,很容易知道如果要獲得隨機兩位整數(shù),代碼寫成:rand.nextInt(90) + 10;

你一定很驚訝,為什么是這么寫出來的。其實,在 nextInt() 方法中作為參數(shù)的數(shù)字 90 表示:你希望生成的隨機數(shù)的所有取值的可能性的數(shù)量(在本命題中,兩位整數(shù)取值為 [10, 99],共90個數(shù));加好后面的數(shù)字 10 ,表示區(qū)間的最小取值。

你可以驗證下,按照這樣理解,[1, 100] 的隨機數(shù),是不是應(yīng)該寫成rand.nextInt(100) + 1 。千萬不要把參數(shù) 100 理解為最大取值。只是區(qū)間 [1, 100] 正好從 1 開始,所以最大取值和取值可能性數(shù)量正好同為 100。

因此,

生成隨機三位數(shù)的代碼為:

rand.nextInt(900)+ 100;

生成區(qū)間 [64,128] 中隨機值的代碼為:

rand.nextInt(65)+ 64;

取值可能性的數(shù)量是如何計算出來的呢?當(dāng)然是 最大取值-最小取值+1 ,所以,有最終公式如下:

// For Java

int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; // randNumber 將被賦值為一個 MIN 和 MAX 范圍內(nèi)的隨機數(shù)

舉例:
  Random r =new Random(100);
  System.out.println(r.nextInt(20));

  種子數(shù)只是隨機算法的起源數(shù)字,和生成的隨機數(shù)字的區(qū)間沒有任何關(guān)系。

初始化時100并沒有起直接作用(注意:不是沒有起作用),r.nextInt(20)中的20是隨機數(shù)的上限,產(chǎn)生的隨機數(shù)為0-20的整數(shù),不包括20。



舉例:

        Random r1 = new Random();
        Random r2 = new Random();
        //無參構(gòu)造使用的是參數(shù)作為種子數(shù)
        Random r3 = new Random(100);
        Random r4 = new Random(100);
        //產(chǎn)生隨機數(shù)調(diào)用nextXXX()方法
        System.out.println(r1.nextInt(10));
        System.out.println(r1.nextInt(10));
        System.out.println(r2.nextInt(10));
        System.out.println(r2.nextInt(10));
        System.out.println("-----------------");
        System.out.println(r3.nextInt(10));       
        System.out.println(r3.nextInt(10));
        System.out.println(r4.nextInt(10));
        System.out.println(r4.nextInt(10));


結(jié)果:

5
1
4
0
-----------------
5
0
5
0



總結(jié):

  1.同一個種子,生成N個隨機數(shù),當(dāng)你設(shè)定種子的時候,這N個隨機數(shù)是什么已經(jīng)確定。相同次數(shù)生成的隨機數(shù)字是完全相同的。

  2.如果用相同的種子創(chuàng)建兩個 Random 實例,如上面的r3,r4,則對每個實例進行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。

      3.Java的隨機數(shù)都是通過算法實現(xiàn)的,Math.random()本質(zhì)上屬于Random()類。

      4.使用java.util.Random()會相對來說比較靈活一些。

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答!! 點擊進入論壇

發(fā)表評論 (890人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號