Math.random()和Random類之間的聯絡
阿新 • • 發佈:2021-01-27
**Math.random()**是令系統隨機產生大於等於0.0,小於1.0的偽隨機double值。假設:產生一個1到4的變數,num = Math.random()*3+1;
Random 類就是含有有引數和無引數兩種的構造,其中不含引數的構造方法是每次將當前的系統時間作為種子,而含引數構造是使用一個固定值(引數)作為種子,種子也就是Random生成隨機數時所使用的引數。每次使用時先建立一個Random物件,也叫隨機數生成器,然後呼叫Random.next**()方法獲取數值。
Random類的注意事項:
- 隨機數是種子經過計算生成的。
- Random類中不含引數的建構函式每次都是使用的當前時間作為種子,隨機性更強;而含引數的建構函式是偽隨機的,更有可預見性。
- 具有相同種子值得Random物件生成的隨機數相同;種子值不同,產生的隨機數不再一致。
Math類的原始碼顯示出Math.random()內部呼叫的方法就是Random類中的nextDouble()方法,此刻也就明確了文章一開始Math.random()返回的是double型別值。
new Random().nextInt(5); 就是要返回的隨機數的邊界,也就是隨機數的範圍是0——5之間的整數
Random類
package dome04;
/*使用:
* 獲取一個隨機的int數字(範圍是int的所有範圍,有正負兩種)
* 獲取一個隨機的int數字(引數代表了範圍,左閉右開區間)
* int nun = r.nextInt(3);
* 實際含義就是0-2*/
import java.util.Random;
import java.util.function.DoubleToIntFunction;
public class Dome04Random {
public static void main(String[] args) {
int n =5;
Random r = new Random();
//本來的範圍是【0,n),整體+1之後就是【1,n】
int result = r.nextInt(n) + 1;
System.out.println(result) ;
}
}