1. 程式人生 > 程式設計 >Java兩種常用的隨機數生成方式(小白總結)

Java兩種常用的隨機數生成方式(小白總結)

人機互動過程中,當我們需要機器給我們反饋不確定的數字結果時,就會需要用到隨機數了,那麼,在Java中,我們應當如何來生成並使用隨機數呢?

一、通過Random類來實現

Random類是JDK的java.util包中的一個工具類,該類可用於在指定範圍內產生隨機數字。考察一下Random類的兩種構造方法:無參構造和有參構造

Random(); 無參構造方法建立一個偽隨機數生成器。Random(long seed);有參構造方法使用一個long型的種子建立偽隨機數生成器。
下面分別使用兩種方式建立Random物件來獲取10個0到100的隨機數

無參構造方式

public class demo1 {
  public static void main(String[] args) {
    Random random = new Random();
    for (int i = 0; i < 10; i++) {
      System.out.println(random.nextInt(100));
    }
  }

執行結果:

Java兩種常用的隨機數生成方式(小白總結)

這裡總結一個應用random.nextInt()的式子:random.nextInt(n)+m,返回的是m到m+n-1之間的隨機數。比如random.nextInt(9)+1,得到就是1到10之間的某數,如果沒有n和m,那麼就是生成一個隨機的int型別的值。當然除了int型別,也可以生成其他數字型的基本資料型別的隨機數,比如double、float、byte等等。

  • nextDouble()方法返回的是0.0到1.0之間的一個double型別的值
  • nextFloat()方法返回的是0.0到1.0之間的一個float型別的值

有參構造方式

public class demo1 {
  public static void main(String[] args) {
    Random random = new Random();
    for (int i = 0; i < 10; i++) {
      System.out.println(random.nextInt(100));
    }
    Random random1 = new Random(100);
    System.out.println("---------");
    for(int i = 0 ;i<10;i++){
      System.out.println(random1.nextInt(100));
    }
  }

這裡為了方便跟無參構造方法建立的隨機數生成器作比較,建立了兩個Random物件。

執行結果:

在這裡插入圖片描述

再執行一次程式碼的結果:

在這裡插入圖片描述

怎麼樣?是不是發現下面的有參構造生成的隨機數每次執行結果都是一樣的,而無參構造方法的random物件每次都能得到不同的隨機數。

這裡的原因是:無參構造方法在建立Random物件時沒有傳入種子引數,程式會自動以當前時間為時間戳,於是每一次的執行結果都是不同的。而有參構造方法建立Random物件時傳入了種子引數,兩次執行時種子相同,實際上不管執行多少次,結果都是一樣的。

二、使用Math類的random方法

Java中的Math類也提供了一個生成隨機數的random方法。

首先需要明確,Math.random()是隨機生成一個0.0到1.0之間的double型別的隨機數,這裡包含0而不包含1。

常見的用法:

public class demo1 {
  public static void main(String[] args) {
    for (int i = 0; i < 3; i++) {
      System.out.println((int) (Math.random() * 10));
    }
  }

Math.random()生成0到1之間的double數,乘以10就變成了0到10之間的double數,再轉成int型,這是我平時接觸比較多的用法(通常我們使用隨機數也是int型別的居多)。執行結果如下(3個0到10之間的整數):

在這裡插入圖片描述

根據需要可以靈活使用random()方法:

  • (int)(Math.random()*n)生成大於等於0小於n的隨機數。
  • (int)(Math.randon()*n)+m生成大於等於m小於m+n的之間的隨機數。
  • (int)(Math.random()*(n-m)+m)生成從m到n範圍內的數,包含m不包含n。

另外,我們還可以用這種方式生成字元:

隨機生成a~z之間的字元
(char)(‘a'+Math.random()*(‘z'-‘a'+1));

隨機生成cha1~cha2的字元
(char)(cha1+Math.random()*(cha2-cha1+1));

小結

以上就是近期自己總結的兩種Java中生成隨機數的方法,實際上開啟Math類中的random方法的原始碼我們可以發現,這個方法就是直接呼叫Random類中的nextDouble方法來實現的。至於實際使用看個人愛好吧,比較推薦直接使用Math類的random方法,要記住的是,以上兩種方法生成的隨機數都是會重複的,如果有不能重複的需求,則需要新增其他操作了。

到此這篇關於Java兩種常用的隨機數生成方式(小白總結)的文章就介紹到這了,更多相關Java 隨機數生成內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!