【问题标题】:AS3 - How can I generate a random number?AS3 - 如何生成随机数?
【发布时间】:2015-05-11 00:54:20
【问题描述】:

如何使用 AS3 在 Flash CS5 中生成随机数,我希望它尽可能简单。

我的尝试给了我一个错误:

day_gross.addEventListener(MouseEvent.CLICK, randomNumber);
function randomNumber(event:MouseEvent):void{
    var randint:Number = Math.random();
    trace(randint);
    }

【问题讨论】:

  • 您收到什么错误?
  • 一个变量为 null 1009。你发现这段代码有什么问题吗?
  • @Noah - day_gross 似乎很可能为空。确保它是在调用addEventListener 之前创建的。如果您使用的是 Flex,您可能需要在 MXML 的 FlexEvent.CREATION_COMPLETE 事件的事件侦听器中执行此代码。
  • 没关系。是我打错了东西。
  • 没问题。我建议要么删除这个问题,要么在下面将我的答案标记为正确。

标签: actionscript-3


【解决方案1】:

Math.random() 返回一个 0-1 之间的随机数。

以下代码创建并跟踪一个介于 0 和 uint 最大值之间的整数:

var randomUint:uint = uint(Math.random() * uint.MAX_VALUE);
trace(randomUint);

下一个代码示例定义并记录 int 的最小值和最大值之间的舍入数(也有负数):

var randomInt:int = int.MIN_VALUE + int(Math.random() * Number(int.MAX_VALUE + int.MIN_VALUE));
trace(randomInt);

【讨论】:

    【解决方案2】:

    您可以使用Math.random() 生成一个伪随机数。

    但是,如果您出于加密目的生成数字,则应使用 flash.crypto.generateRandomBytes()(需要 FP11)

    【讨论】:

    • @TechnikEmpire 我的回答怎么没有帮助?该问题不需要随机 integral 数字,并且两个答案都使用 Math.rand()?
    • 查看更多赞成票的答案。他去解释确切的方法并提供代码示例。原始问题发布了已经使用 Math.random() 的代码,只是不正确(根据要求)。你基本上只是发布他已经完成的事情。
    【解决方案3】:
    private function randomIntBetween(min:int, max:int):int {
        return Math.round(Math.random() * (max - min) + min);
    }
    

    【讨论】:

    • 警告!此函数产生不均匀分布。下面的蒙特卡罗模拟显示“边缘”数字大约是“内部”数字的一半......var a = [0,0,0,0,0,0,0,0]; for (var i = 0; i < 100000; i++){ a[this.randomIntBetween(2,6)]++; } for (var j = 0; j < a.length; j++){ trace(j+": "+a[j]+", "); } 产生了以下结果“0:0、1:0、2:12422、3:25028、4:24752、 5:25212、6:12586、7:0,”
    • 你是对的@Sean,解决方案是使用Math.floor 并通过将1 添加到最小值来补偿,如下所示:Math.floor(Math.random() * (max - min + 1) + min);
    【解决方案4】:

    让它工作的最简单方法是这样。当您单击一个按钮时,它会生成一个随机数。这是自我解释

    protected function button1_clickHandler(event:MouseEvent):void
    {
        var numbers:Array = new Array(49);
        for (var i:int = 0; i < numbers.length; i++) 
        {
            numbers[i]=i;
            numbers[i] =[Math.round( Math.random()*i)];
            resulttxt.text = numbers[i];
        }
    }
    <s:Button top="342" label="Generate" click="button1_clickHandler(event)" horizontalCenter="0"/>
    <s:TextInput id="resulttxt" left="10" top="65" width="250"/>
    

    这对我有用。试试看

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-19
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 2020-08-06
      • 2020-07-20
      相关资源
      最近更新 更多