Random類生成隨機數及相同種子建立的例項的相同性
阿新 • • 發佈:2018-12-15
一、認識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()); } }
結果: