跳轉到內容

隨機數

75% developed
來自華夏公益教科書,開放的書籍,開放的世界

導航 語言基礎 主題: v  d  e )


要生成隨機數,可以使用`Math.random()`方法,該方法返回一個大於等於 0.0 且小於 1.0 的`double`值。

以下程式碼返回 n 和 m 之間的隨機整數(其中 *n <= randomNumber < m*)

Example 程式碼段 3.30:隨機整數。
  int randomNumber = n + (int)(Math.random() * ( m - n ));

或者,`java.util.Random` 類提供了生成隨機`boolean`、`byte`、`float`、`int`、`long` 和“高斯分佈”的方法(從均值為 0.0、標準差為 1.0 的正態分佈中獲取`double`值)。例如,以下程式碼等同於上面的程式碼

Example 程式碼段 3.31:帶有高斯分佈的隨機整數。
  Random random = new Random();
  int randomNumber = n + random.nextInt(m - n);

作為使用隨機數的示例,我們可以建立一個程式,該程式使用 Random 物件模擬拋硬幣 20 次。

Computer code 程式碼清單 3.25:CoinFlipper.java
import java.util.Random;

public class CoinFlipper {

  public static void main(String[] args) {
    // The number of times to flip the coin
    final int TIMES_TO_FLIP = 20;
    int heads = 0;
    int tails = 0;
    // Create a Random object
    Random random = new Random();
    for (int i = 0; i < TIMES_TO_FLIP; i++) {
      // 0 or 1
      int result = random.nextInt(2);
      if (result == 1) {
        System.out.println("Heads");
        heads++;
      } else {
        System.out.println("Tails");
        tails++;
      }
    }
    System.out.println("There were "
            + heads
            + " heads and "
            + tails
            + " tails");
  }
}
Computer code 程式碼清單 3.25 的可能輸出
Heads
Tails
Tails
Tails
Heads
Tails
Heads
Heads
Heads
Heads
Heads
Heads
Tails
Tails
Tails
Tails
Heads
Tails
Tails
Tails
There were 9 heads and 11 tails

當然,如果您執行該程式,您可能會得到不同的結果。

真正隨機的數字

[編輯 | 編輯原始碼]

`Math.random()` 和 `Random` 類都生成偽隨機數。對於許多應用程式來說,這已經足夠好了,但請記住,它不是 *真正* 的隨機數。如果您需要更安全的隨機數生成器,Java 提供了 `java.security.SecureRandom` 包。`Math.random()` 和 `Random` 類的工作原理是,它們會選擇一個“種子”來生成偽隨機數。`SecureRandom` 提高了安全性,以確保偽隨機數生成器使用的種子是非確定性的——也就是說,您不能簡單地將機器置於相同的狀態以獲得相同的結果集。建立 `SecureRandom` 例項後,您可以像使用 `Random` 類一樣使用它。

如果您需要 *真正* 隨機的數字,您可以獲取硬體隨機數生成器或使用隨機數生成服務。


Clipboard

待辦事項
新增一些練習,類似於 變數 中的練習。


華夏公益教科書