【问题标题】:Actionscript-3 random numbers between max and min最大值和最小值之间的 Actionscript-3 随机数
【发布时间】:2011-02-09 08:55:25
【问题描述】:

我正在使用此代码在 min 和 max 之间生成一个随机数:

return min + (max - min) * Math.random();

而且它有效。但是,即使最大值为 80,随机数通常也很少,通常在“1 或 3”之间。

如何更好地在所有范围内分配随机数?

谢谢

【问题讨论】:

  • 如果你的最小值和最大值也是随机的,那么这可能会导致 1 或 3 个稀有!您的功能应该可以工作。如果您将 min 设置为 1,将 max 设置为 10,并运行 100 次,您应该会看到其中大约 22 个介于 1 和 3 之间,尽管可能不完全正确。

标签: actionscript-3 math random


【解决方案1】:

试试这个。

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

【讨论】:

    【解决方案2】:
    number = (400 - (Math.floor(Math.random()*110)));
    
    400 = max
    110 = min
    

    【讨论】:

      【解决方案3】:

      Math.Random()


      Math.random() 返回一个介于 0.01.0 值之间的随机数。要生成 1 和 MAX 之间的随机整数(我假设你想要),试试这个:

      Math.ceil(Math.random()*MAX);
      

      有关 Math.Random() 的更多信息,请参阅:

      Official Actionscript Documentaion

      • 要生成介于 MIN 和 MAX 之间的随机整数,试试这个:
        MIN + Math.round(Math.random()*(MAX-MIN));

      • 要在 MIN 和 MAX 之间生成一个随机小数(浮点数),试试这个:
        MIN + Math.random()*(MAX-MIN));

      【讨论】:

      • 如果你也想得到0,你可以使用:Math.floor(Math.random()*MAX);
      【解决方案4】:

      我非常确定您发布的代码return min + (max - min) * Math.random(); 应该返回一个介于 min(包括)和 max(不包括)之间的均匀分布的随机数。它没有理由返回 1 和 3 之间。您是否尝试跟踪 min 和 max 以确保它们是您认为的数字?

      【讨论】:

        【解决方案5】:

        试试这个:

        package util
        {
        public class RandomNumberHelper
        {
            public static function randomIntRange(start:Number, end:Number):int
            {
                return int(randomNumberRange(start, end));
            }
        
            public static function randomNumberRange(start:Number, end:Number):Number
            {
                end++;
                return Math.floor(start + (Math.random() * (end - start)));
            }
        }
        }
        

        ...

        protected function testRandomIntsInRange(start:int, end:int):void
        {
            var randomIntsAssigned:Object = {};
            var randomInt:int = 0;
            for (var i:int = 0; i < 10000; i++)
            {
                randomInt = RandomNumberHelper.randomIntRange(start, end);
        
                if (!randomIntsAssigned.hasOwnProperty(randomInt))
                    randomIntsAssigned[randomInt] = 0;
        
                randomIntsAssigned[randomInt]++;
            }
            trace(randomIntsAssigned);
        }
        

        我至少在 0 到 9 之间得到了相当均匀的分布。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-07
          • 2018-07-01
          • 2018-04-09
          • 2018-08-01
          相关资源
          最近更新 更多