淺析Java中產生隨機數的方式 – JAVA編程語言程序開發技術文章

在java中,我們可以通過兩種方式來獲取隨機數(generating a random number)一種是大傢熟悉的java.lang.Math.Random()靜態方法,另一種是創建java.util.Random對象。下面是兩種方法的使用過程:
1. java.lang.Math.random()
在使用這一靜態方法的時候,我們不需要import任何包,因為java.lang.*包是默認載入的,下面舉例說明:
[java] 
package com.luiszhang.test; 
 
public class RandomTest { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
         
        //random()會自動產生一個0.0-1.0的雙精度隨機數 
        double doubleRadomNum = Math.random(); 
        System.out.println(doubleRadomNum); 
        //產生0-1000的雙精度隨機數 
        doubleRadomNum = Math.random() * 1000; 
        System.out.println(doubleRadomNum); 
         
        //產生0-1000的整數隨機數 
        int intRandomNum = (int) (Math.random() * 1000); 
        System.out.println(intRandomNum); 
    } 
 

2. 創建java.util.Random對象
[java] 
package com.luiszhang.test; 
 
import java.util.Random; 
 
public class RandomTest { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        // 創建random對象 
        Random random = new Random(); 
        //獲取一個整型隨機數 
        int intNumber = random.nextInt(); 
        //獲取一個浮點隨機數(0-1) 
        float floatNumber = random.nextFloat(); 
        //獲取雙精度隨機數(0-1) 
        double doubleNumber = random.nextDouble(); 
        //獲取boolean隨機數 
        boolean booleanNumber = random.nextBoolean(); 
         
        System.out.println("intNumber:" + intNumber); 
        System.out.println("floatNumber:" + floatNumber); 
        System.out.println("doubleNumber:" + doubleNumber); 
        System.out.println("booleanNumber:" + booleanNumber); 
    } 
 

說明:
(1)我們可以通過System.currentTimeMillis()方法,這個方法返回一個從1970年1月1號0點0分0秒到目前的一個毫秒數,返回類型是long,我們可以拿他作為一個隨機數,我們可以拿他對一些數取模,就可以把他限制在一個范圍之內啦。(在循環中易產生重復值,不好用)
(2)Random random = new Random();不指定基數,此種方式將會返回隨機的數字,每次運行結果不一樣。當然我們也可以指定基數,例如:Random random=new Random(100);同一基數所產生的隨機數序列是一樣的。
下面我們將寫測試程序對這些進行驗證:
[java]
package com.luiszhang.test; 
import java.util.Random; 
 
public class RandomTest { 
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
        // 以100為基數創建兩個隨機數 
        Random randomNumber1 = new Random(100); 
        Random randomNumber2 = new Random(100); 
         
        // 驗證同一基數生成的Random對象產生的隨機數是否相等 
        for(int i = 0; i < 5; i++) { 
            System.out.print(randomNumber1.nextInt() + " "); 
            System.out.print(randomNumber2.nextInt() + "\n"); 
            System.out.println("Is equal is " + (randomNumber1.nextInt() == randomNumber2.nextInt())); 
            System.out.println("——————————"); 
             
            System.out.print(randomNumber1.nextDouble() + " "); 
            System.out.print(randomNumber2.nextDouble() + "\n"); 
            System.out.println("Is equal is " + (randomNumber1.nextDouble() == randomNumber2.nextDouble())); 
            System.out.println("——————————"); 
             
            System.out.print(randomNumber1.nextFloat() + " "); 
            System.out.print(randomNumber2.nextFloat() + "\n"); 
            System.out.println("Is equal is " + (randomNumber1.nextFloat() == randomNumber2.nextFloat())); 
            System.out.println("——————————"); 
             
            System.out.print(randomNumber1.nextBoolean() + " "); 
            System.out.print(randomNumber2.nextBoolean() + "\n"); 
            System.out.println("Is equal is " + (randomNumber1.nextBoolean() == randomNumber2.nextBoolean())); 
            System.out.println("——————————"); 
        } 
         
         
    // 以當前時間自己生成隨機數,隨機數范圍為1-32 
        for(int i = 0; i < 5; i++) { 
            System.out.print((System.currentTimeMillis()%32 + 1) + "\n"); 
            System.out.println("——————————"); 
        } 
    } 

發佈留言