C語言中文網 目錄

Java生成隨機數(random()和random類)

在 java 中要生成一個指定范圍之內的隨機數字有兩種方法:一種是調用 Math 類的 random() 方法,一種是使用 Random 類。

Random 類提供了豐富的隨機數生成方法,可以產生 boolean、int、long、float, byte 數組以及 double 類型的隨機數,這是它與 random() 方法最大的不同之處。random() 方法只能產生 double 類型的 0~1 的隨機數。

Random 類位于 java.util 包中,該類常用的有如下兩個構造方法。
  • Random():該構造方法使用一個和當前系統時間對應的數字作為種子數,然后使用這個種子數構造 Random 對象。
  • Random(long seed):使用單個 long 類型的參數創建一個新的隨機數生成器。

Random 類提供的所有方法生成的隨機數字都是均勻分布的,也就是說區間內部的數字生成的概率是均等的,在表 1 中列出了 Random 類中常用的方法。

表1 random類的常用方法
方法 說明
boolean nextBoolean() 生成一個隨機的 boolean 值,生成 true 和 false 的值概率相等
double nextDouble() 生成一個隨機的 double 值,數值介于[0,1.0),含 0 而不包含 1.0
int nextlnt() 生成一個隨機的 int 值,該值介于 int 的區間,也就是 -231~231-1。如果
需要生成指定區間的 int 值,則需要進行一定的數學變換
int nextlnt(int n) 生成一個隨機的 int 值,該值介于 [0,n),包含 0 而不包含 n。如果想生成
指定區間的 int 值,也需要進行一定的數學變換
void setSeed(long seed) 重新設置 Random 對象中的種子數。設置完種子數以后的 Random 對象
和相同種子數使用 new 關鍵字創建出的 Random 對象相同
long nextLong() 返回一個隨機長整型數字
boolean nextBoolean() 返回一個隨機布爾型值
float nextFloat() 返回一個隨機浮點型數字
double nextDouble() 返回一個隨機雙精度值

例 1

下面編寫一個 Java 程序,演示如何使用 Random 類提供的方法來生成隨機數。具體代碼如下:
Import java.util.Random; public class Test06
{
    public static void main(String[] args)
    {
        Random r=new Random();
        double d1=r.nextDouble();    //生成[0,1.0]區間的小數
        double d2=r.nextDouble()*7;    //生成[0,7.0]區間的小數
        int i1=r.nextInt(10);    //生成[0,10]區間的整數
        int i2=r.nextInt(18)-3;    //生成[-3,15]區間的整數
        long l1=r.nextLong();    //生成一個隨機長整型值
        boolean b1=r.nextBoolean();    //生成一個隨機布爾型值
        float f1=r.nextFloat{);    //生成一個隨機浮點型值
        System.out.println("生成的[0,1.0]區間的小數是:"+d1);
        System.out.println("生成的[0,7.0]區間的小數是:"+d2);
        System.out.println("生成的[0,10]區間的整數是:"+il);
        System.out.println("生成的[-3,15]區間的整數是:"+i2);
        System.out.println("生成一個隨機長整型值:"+l1);
        System.out.println("生成一個隨機布爾型值:"+b1);
        System.out.println("生成一個隨機浮點型值:"+fl);
        System.out.print("下期七星彩開獎號碼預測:”);
        for(int i=1;i<8;i++)
        {
            int num=r.nextlnt(9);    //生成[0,9]區間的整數
            System.out.print(num);
        }
    }
}

本實例每次運行時結果都不相同,這就實現了隨機產生數據的功能。該程序的運行結果如下:
生成的[0,1.0]區間的小數是:0.8471314908854594
生成的[0,7.0]區間的小數是:3.376288548243103
生成的[0,10]區間的整數是:8
生成的[-3,15]區間的整數是:3
生成一個隨機長整型值:-6309801943074175174
生成一個隨機布爾型值:true
生成一個隨機浮點型值:0.40940058
下期七星彩開獎號碼預測:0377088

例 2

Math 類的 random() 方法沒有參數,它默認會返回大于等于 0.0、小于 1.0 的 double 類型隨機數,即 0<=隨機數<1.0。對 random() 方法返回的數字稍加處理,即可實現產生任意范圍隨機數的功能。

下面使用 random() 方法實現隨機生成一個 2~100 偶數的功能。具體代碼如下:
public class Test07
{
    public static void main(String[] args)
    {
        int min=2;    //定義隨機數的最小值
        int max=102;    //定義隨機數的最大值
        //產生一個2~100的數
        int s=(int)min+(int)(Math.random()*(max-min));
        if(s%2==0)    //如果是偶數就輸出
            System.out.println("隨機數是:"+s);
        else    //如果是奇數就加1后輸出
            System.out.println("隨機數是:"+(s+1));
    }
}

由于 m+(int)(Math.random()*n) 語句可以獲取 m~m+n 的隨機數,所以 2+(int)(Math. random()*(102-2)) 表達式可以求出 2~100 的隨機數。在產生這個區間的隨機數后還需要判斷是否為偶數,這里使用了對 2 取余數,如果余數不是零,說明隨機數是奇數,此時將隨機數加 1 后再輸出。

該程序的運行結果如下:
隨機數是:20

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo