【问题标题】:How to create a random number between -2.0 and 2.0如何创建一个介于 -2.0 和 2.0 之间的随机数
【发布时间】:2015-01-02 06:15:57
【问题描述】:

我正在尝试在坐标平面上创建一个随机点,并且我希望 x 和 y 是介于 -2.0 和 2.0 之间的两个随机浮点数

鉴于我已经尝试过

x  = (random.nextDouble() - 2);
y  = (random.nextDouble() - 2);

上面只会返回坐标平面负象限的(x,y)。

我怎样才能让它平等地到达所有四个象限?

【问题讨论】:

  • 您在标题中声明您想要一个随机浮点数,现在您正在使用双打。 x 和 y 是如何定义的?如果它们是浮点数,那么这就是问题的一部分。请发布整个代码。
  • @Turing85 double 是浮点类型,所以“float”的使用合理清晰
  • @Bohemian 不是,如果 x 和 y 被定义为浮点数。
  • @Turing85 它们不是浮点数;如果它们是代码将无法编译。

标签: java random negative-number


【解决方案1】:

在 0-4 范围内创建一个数字(相同的大小或您的目标范围),然后减去 2 以对齐范围的开始/结束:

x = random.nextDouble() * 4 - 2;

FYI小点:不必在表达式中使用双常量,例如4.0,因为当算术运算的操作数之一是double时,java会自动(安全)加宽其他类型转double

【讨论】:

    【解决方案2】:

    random.nextDouble() 返回一个介于 0.0 和 1.0 之间的随机值,所以如果只是减去 2,就会得到一个介于 -2.0 和 -1.0 之间的随机值。

    您还必须缩放该值 - 将其乘以范围的大小,在您的情况下为 4:

    x = 4.0 * random.nextDouble() - 2.0;
    y = 4.0 * random.nextDouble() - 2.0;
    

    【讨论】:

      【解决方案3】:

      random.nextDouble() 只返回 0.0 到 1.0 你需要先乘以 4

      x  = (random.nextDouble() * 4 - 2);
      y  = (random.nextDouble() * 4 - 2);
      

      【讨论】:

        【解决方案4】:

        简单:您只需要缩放它。减去.5 得到一个介于-.5.5 之间的数字,然后将其乘以4,得到-22 之间的数字。

        x  = ((random.nextDouble() - .5) * 4);
        y  = ((random.nextDouble() - .5) * 4);
        

        【讨论】:

          【解决方案5】:

          所以 random.nextDouble() 返回一个数字 0-.9999,所以你必须将它乘以你的范围 -2 - 2 = 4

          然后减去 2 得到 -2 到 2

          x = (random.nextDouble()*4 -2)

          y = (random.nextDouble()*4 -2)

          【讨论】:

            猜你喜欢
            • 2013-11-08
            • 2012-03-16
            • 2016-05-31
            • 1970-01-01
            • 1970-01-01
            • 2012-11-03
            • 1970-01-01
            • 1970-01-01
            • 2011-12-04
            相关资源
            最近更新 更多