【问题标题】:Generate random doubles in between a range of values - Java在一系列值之间生成随机双精度值 - Java
【发布时间】:2014-02-13 23:21:28
【问题描述】:

我编写了这段代码,它生成介于 -1 和 1 之间的随机双精度。唯一的问题是它只生成一个随机双精度,然后只打印出我想要生成的其他双精度。例如。如果第一个双精度数是 0.51,它只会一遍又一遍地打印 0.51,而不是生成新的随机双精度数。

以下代码有什么问题?

public static void main(String[] args) {
    double start = -1;
    double end = 1;
    double random = new Random().nextDouble();

    for(int i=1; i<10; i++){
        double result = start + (random * (end - start));

        System.out.println(result);
    }
}

提前致谢!

【问题讨论】:

  • 您是否在循环中生成随机数?不,你不是。

标签: java random numbers double


【解决方案1】:

每次需要新的随机数时,都必须生成新的随机数 (nextDouble())。 试试:

public static void main(String[] args) {
    double start = -1;
    double end = 1;
    Random random = new Random();

    for(int i=1; i<10; i++){
        double result = start + (random.nextDouble() * (end - start));

        System.out.println(result);
    }
}

【讨论】:

  • 嗨,谢谢!我将其更改为现在说 nextDouble 但现在它说我不能在原始类型 double 上调用 nextDouble。我在网上看了一下,它说 nextDouble 只能用于随机和扫描仪,这就是我正在做的。你知道这是什么原因吗?再次感谢:)
  • @user3146858,看看我的代码 - 我在 Random 对象上执行 nextDouble(),而不是在双原语上。 Random 是用于生成伪随机数据的对象。你在这个类中有很多方法可以生成整数、双精度等。考虑修改docs.oracle.com/javase/6/docs/api/java/util/Random.html
  • 请记住它是伪随机的。有一些方法可以生成一些特定的集合,例如 nextInt 将连续十次返回 1 等。
  • 连续十次生成 1 绝不表示该序列是伪随机的。序列确定性可重现这一事实是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2012-05-16
  • 2016-01-08
  • 2011-05-02
  • 1970-01-01
  • 2011-02-11
相关资源
最近更新 更多