在 Java 中生成 0 和 1 之間的隨機雙精度值

Rupam Yadav 2023年10月12日
  1. 在 Java 中使用 Math.random() 生成 0 和 1 之間的隨機雙精度值
  2. 在 Java 中使用 Random().nextDouble() 生成 0 和 1 之間的隨機雙精度值
  3. 在 Java 中使用 ThreadLocalRandom.current().nextDouble() 生成 0 和 1 之間的隨機雙精度值
在 Java 中生成 0 和 1 之間的隨機雙精度值

本文將介紹三種方法來生成原始型別 double 的 0 到 1 之間的隨機值。為了證明生成值的隨機性,我們將使用迴圈生成 0 到 1 之間的十個隨機雙精度值。

在 Java 中使用 Math.random() 生成 0 和 1 之間的隨機雙精度值

Math 類可用於執行各種數學運算。我們也可以使用這個類來生成隨機數。Math.random() 是返回 0 到 1 之間隨機數的靜態函式。這裡,0 包含生成的值,而 1 始終不包含。

在以下示例中,我們使用 Math.random() 生成 double 型別的隨機值。在輸出中,我們可以看到這些值都是隨機的。

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = Math.random();

      System.out.println(randomDbl);
    }
  }
}

輸出:

0.9537872648347154
0.2863804438195172
0.5815339629441948
0.7734677312115609
0.021051510563543485
0.9064133490694901
0.6833468691871607
0.30655711217738246
0.2730784326888416
0.6804778782692341

在 Java 中使用 Random().nextDouble() 生成 0 和 1 之間的隨機雙精度值

另一種可以生成 0 到 1 之間隨機數的方法是 nextDouble(),它是 java.util.Random 類的一部分。當我們使用 Random 類的物件呼叫 nextDouble() 時,它返回一個介於 0 和 1 之間的隨機值,就像我們在前面的示例中看到的那樣。

據說這種方法比 Math.random() 更有效。

import java.util.Random;

public class RandomDouble {
  public static void main(String[] args) {
    Random randomObj = new Random();

    for (int i = 0; i < 10; i++) {
      double randomDbl = randomObj.nextDouble();

      System.out.println(randomDbl);
    }
  }
}

輸出:

0.240017494934622
0.08331956619499614
0.4359524465181911
0.5291811081068774
0.38193057731688373
0.6969527822622924
0.5436002348156281
0.32176862575520415
0.07327708002828293
0.9005635171231344

在 Java 中使用 ThreadLocalRandom.current().nextDouble() 生成 0 和 1 之間的隨機雙精度值

我們在本教程中看到的兩種技術對於多執行緒系統效率不高,可能會導致效能不佳。這是因為當我們使用 Random 類生成隨機數時,所有執行緒共享同一個例項,這意味著當一個執行緒發生變化時,所有其他執行緒也會被執行。

為了解決這個問題,Java 在 JDK 7 更新中引入了 ThreadLocalRandom。它是一個只在當前執行緒上執行的類,從而在多執行緒環境中獲得更好的效能。

在下面的示例中,我們呼叫 nextDouble(),它使用 ThreadLocalRandom.current() 生成雙隨機值,它返回一個隨機生成的介於 0 和 1 之間的雙精度值。

import java.util.concurrent.ThreadLocalRandom;

public class RandomDouble {
  public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
      double randomDbl = ThreadLocalRandom.current().nextDouble();

      System.out.println(randomDbl);
    }
  }
}

輸出:

0.9717084711770174
0.8977374014983726
0.2744375247405819
0.2866498720386894
0.6118970047667582
0.7441044456568308
0.21043457873690274
0.08985457420563114
0.86748682220748
0.18952106607144148
作者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Random