【问题标题】:Math.random() v/s Random class [duplicate]Math.random() 与随机类 [重复]
【发布时间】:2015-12-27 12:10:58
【问题描述】:

Java 中的Math 类有一个方法Math.random(),它返回一个介于0 和1 之间的伪随机数。
还有一个类java.util.Random,它有各种方法,如nextInt()、nextFloat()、nextDouble()、nextLong()等。

我的问题是,如果我想获得一个范围内的随机数(比如 30-70),那么我应该走哪条路?考虑的因素是速度和随机性。

【问题讨论】:

标签: java random


【解决方案1】:

如果您查看Math.random() 的实现,您会发现它使用了Random 类的实例:

public static double random() {
    return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}

private static final class RandomNumberGeneratorHolder {
    static final Random randomNumberGenerator = new Random();
}

因此随机性是相同的。

也就是说,既然你需要一个int 而不是double,你最好使用Random 类的nextInt 方法,因为它可以省去@987654328 的乘法和转换@到int。

Random rnd = new Random();
int num = rnd.nextInt(41)+30;

【讨论】:

    【解决方案2】:

    我个人会选择 random 类,因为在我看来,它更容易使用和影响参数,例如 30-79 之间的随机数

    Random r = new Random(); int i = r.nextInt(40)+30;

    我希望至少有一点帮助

    【讨论】:

      【解决方案3】:

      Math.random() 确实依赖于 Random 类。根据您使用的情况和数据类型,您可以使用其中任何一种。对于int Random.nextInt() 可能是最好的选择。

      说到随机性,更安全的随机类是 SecureRandom。 SecureRandom 不像 Random 那样依赖于系统时间,所以如果你的应用程序有安全元素,那么一定要使用 SecureRandom。相同的方法名称,除了

      SecureRandom secureRandom = new SecureRandom() 而不是

      Random random = new Random().

      【讨论】:

      • SecureRandom 位于哪个包中?
      • @PriydarshiSingh java.security.SecureRandom
      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 2015-10-16
      • 2012-12-21
      • 2021-03-22
      • 2014-04-30
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多