【问题标题】:Generation a random number between 50% and 150% [duplicate]生成一个介于 50% 和 150% 之间的随机数 [重复]
【发布时间】:2016-11-13 20:31:42
【问题描述】:

我有:

private Random rng = new Random();

double random = rng.nextDouble(1.5-0.5) + 0.5;

因为我想生成一个介于 50% 和 150% 之间的数字。但是它给我一个错误。如何使用随机函数获得该范围内的数字?

【问题讨论】:

  • “它给我一个错误”不是一个有用的描述。请在您的问题中包含异常堆栈跟踪!
  • 如果你修复了错误,它可能会起作用。
  • 欢迎来到 Stack Overflow!请查看我们的SO Question Checklist 以帮助您提出一个好问题,从而得到一个好的答案。

标签: java random range


【解决方案1】:

您的问题是:您应该阅读 javadoc。含义:不要假设某些库方法会做某事;相反:阅读文档以验证您的假设是否正确。

在这种情况下,请查看 Double.nextDouble ... 并找到:

从这个随机数生成器的序列中返回下一个 0.0 到 1.0 之间的伪随机、均匀分布的双精度值。

重点是:没有方法 nextDouble() 接受双参数!只有一个没有任何争论;该方法默认返回一个介于 0 和 1 之间的值。

因此,只需更改您的代码以调用该方法而无需任何参数!

【讨论】:

    【解决方案2】:

    那是因为nextDouble不接收参数,只返回0.0到1.0之间的double。使用以下内容:

    Random rng = new Random();
    
    double max = 1.5;
    double min = 0.5;
    double random = rng.nextDouble(); // Double between 0.0 and 1.0
    
    double percentage = random*(max-min) + min;
    System.out.println(percentage);
    

    【讨论】:

      【解决方案3】:

      如果你阅读了 ide 中的错误或者只是查看 java doc 你会清楚地看到原因......

      Random 类型中的 nextDouble() 方法不适用于 参数(双)

      随机类没有这样的方法nextDouble() 以双精度为参数

      顺便说一句,您为什么不直接生成一个介于 50 和 150 之间的随机整数...这对于您想要的实现更有意义...

      类似

      Random rand = new Random();
      randomNum = minimum + rand.nextInt((maximum - minimum) + 1);
      

      【讨论】:

        【解决方案4】:

        你可以做 50% 和 100% 之类的事情

        public static void main(final String[] args) {
            Random rng = new Random();
            double random = rng.nextDouble();
        
            if (random <= 0.5) {
                System.out.println("50% " + random);
            } else {
                System.out.println("100% " + random);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-03
          • 2012-05-28
          • 1970-01-01
          • 2016-01-08
          • 1970-01-01
          • 2014-03-20
          • 2016-05-31
          相关资源
          最近更新 更多