在 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