1. 程式人生 > >Random類生成隨機數及相同種子建立的例項的相同性

Random類生成隨機數及相同種子建立的例項的相同性

一、認識Random類

   Random類專門用於生成一個偽隨機數,它的有兩個構造器,一個使用當前時間作為種子,另一個構造器需要程式設計師自己傳入一個long型別的種子。

二、基本操作

1、nextDouble():生成0.0~0.1之間的偽隨機double數

2、nextFloat():生成0.0~1.0之間的偽隨機float數

3、nextGaussian():生成平均值是0.0,標準差是1.0的偽高斯數

4、nextInt():生成一個處於int整數取值範圍的偽隨機整數\

5、nextInt(int value):生成0~value之間的偽隨機整數

6、nextLong():生成一個處於long整數取值範圍的偽隨機整數

三、java實現

import java.util.Arrays;
import java.util.Random;

public class RandomTest {
    public static void main(String[] args){
        Random rand = new Random();
        System.out.println("rand.nextBoolean():" + rand.nextBoolean());
        byte[] buffer = new byte[5];
        rand.nextBytes(buffer);
        System.out.println(Arrays.toString(buffer));
        //生成0.0~0.1之間的偽隨機double數
        System.out.println("rand.nextDouble():"+rand.nextDouble());
        //生成0.0~1.0之間的偽隨機float數
        System.out.println("rand.nextFloat():" + rand.nextFloat());
        //生成平均值是0.0,標準差是1.0的偽高斯數
        System.out.println("rand.nextGaussian():" + rand.nextGaussian());
        //生成一個處於int整數取值範圍的偽隨機整數
        System.out.println("rand.nextInt():" + rand.nextInt());
        //生成0~26之間的偽隨機整數
        System.out.println("rand.nextInt(26):" + rand.nextInt(26));
        //生成一個處於long整數取值範圍的偽隨機整數
        System.out.println("rand.nextLong():" + rand.nextLong());
    }
}

結果:

四、相同的種子

Random使用相同的種子來建立多個例項,並且他們呼叫方法的順序一樣,則會產生相同的數字序列,這裡的種子最大是48位。(javaAPI:如果用相同的種子建立兩個 Random 例項,則對每個例項進行相同的方法呼叫序列,它們將生成並返回相同的數字序列。)

五、java實現

import java.util.Random;

public class SeeTest {
    public static void main(String[] args){
        Random r1 = new Random(50);
        System.out.println("第一個種子為50的Random物件");
        System.out.println("r1.nextBoolean():" + r1.nextBoolean());
        System.out.println("r1.nextInt():" + r1.nextInt(10));
        System.out.println("r1.nextDouble():" + r1.nextDouble());
        Random r2 = new Random(50);
        System.out.println("第一個種子為50的Random物件");
        System.out.println("r2.nextBoolean():" + r2.nextBoolean());
        System.out.println("r2.nextInt():" + r2.nextInt(10));
        System.out.println("r2.nextDouble():" + r2.nextDouble());
        Random r3 = new Random(50);
        System.out.println("第一個種子為1000的Random物件");
        System.out.println("r3.nextBoolean():" + r3.nextBoolean());
        System.out.println("r3.nextInt():" + r3.nextInt(10));
        System.out.println("r3.nextDouble():" + r3.nextDouble());
        Random r4 = new Random(100);
        System.out.println("第一個種子為1000的Random物件");
        System.out.println("r4.nextBoolean():" + r4.nextBoolean());
        System.out.println("r4.nextInt():" + r4.nextInt(10));
        System.out.println("r4.nextDouble():" + r4.nextDouble());
        //用當前時間作為Random物件的種子
        Random rand = new Random(System.currentTimeMillis());
        System.out.println(System.currentTimeMillis());
    }
}

結果: