【问题标题】:AS3: can't figure out Math.randomAS3:无法弄清楚 Math.random
【发布时间】:2014-08-02 01:51:36
【问题描述】:

我的数学很差,所以我不知道为什么这不起作用。它应该计算一个介于 0 到 360 之间的随机数。

var minDegree:int = 0
var maxDegree:int = 360

function randomDegree (minDegree:Number, maxDegree:Number):Number 
{
    return (Math.random() * (maxDegree - minDegree + minDegree));
    trace(randomDegree)
}

【问题讨论】:

    标签: actionscript-3 oop math random


    【解决方案1】:

    我假设您实际上想要整数,对吧?这是实际代码:

    private function randRange(minNum:Number, maxNum:Number):Number 
    {
        return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
    }
    

    我发布它是因为@Xenophage 的回答不正确。而且这是不正确的,因为 Math.random 返回一个伪随机数 n,其中 0 (reference)。这意味着如果您将0 设为最小值,将360 设为最大值,那么您可以获得的最大数字是359,因为:

    (Math.random() * (maxDegree - minDegree) + minDegree);
    (0.99999 * (360 - 0) + 0) = 359
    

    所以上面的解决方案会更好:) 如果您不是在寻找整数 - 请告诉我。

    编辑:我已经随机返回更精确的数字,就好像它只是 0.99 它会计算为 354 而不是 359。任何一种方式都不会达到 360。 是的,我知道你需要学位,所以0 类似于360,如果你不做一些精确的计算,但我不得不提一下,因为这是Math.random 的问题,而不是学位的问题。

    【讨论】:

      【解决方案2】:

      你非常接近,将右括号移开一点。将最大值和最小值之间的差相乘,然后再加上最小值,使值回到正确的范围内。我发现使用简单的计算器尝试一些示例并查看结果是否有意义很容易。

      var minDegree:int = 0
      var maxDegree:int = 360
      
      function randomDegree (minDegree:Number, maxDegree:Number):Number 
      {
          return Math.min(maxDegree, Math.random() * (maxDegree - minDegree) + minDegree + .01);
      }
      
      trace(randomDegree(minDegree, maxDegree));
      

      【讨论】:

      • 感谢您的快速回复!还有一个问题,这并没有给出跟踪输出,知道为什么吗?
      • 你跟踪函数(这样你就可以返回函数)加上你在 return 语句之后跟踪它
      • 好吧,因为它首先返回值:)
      • @AndreyPopov - 这就是原始问题中的情况,不会使答案错误或不好(例如,不值得投反对票)。
      • 我这样做是因为答案不是 100% 正确的。现在会写我自己的:)
      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多