【问题标题】:Math.random array length +1?Math.random 数组长度 +1?
【发布时间】:2011-08-22 16:33:43
【问题描述】:

我不明白这段代码中的某些内容:

vars.randAnim = anims[Math.floor(Math.random()*(anims.length + 1))];

假设我们有一个新的Array,有 5 个元素,所以从索引 0 到索引 4

那么假设Math.random() 返回 1。所以,我们得到了1*5 的下限,但是我的Array 中不存在 5 索引,而且我们在这里添加了一个“+1”

为什么要 +1?我本来期望与“-1”完全相反。

【问题讨论】:

  • +1 在这里实际上是错误的。 :-)
  • 假设Math.random() 返回 .99,然后,.99*5=4.95 然后 4.95+1=5.95 然后Math.floor 将返回 5,这将超出数组的范围。因此问题是:为什么+1到底是什么?
  • 代码 +1 是错误的,正如 Rocket 所说。但这个推理也有一个缺陷:Math.random() 不能返回“1”。
  • @Rocket @leonbloy @sv_in @Kevin :谢谢,这真的正确吗? math.random 永远不会是 '1' ??我第一次听说,非常感谢您的提示

标签: javascript arrays math random


【解决方案1】:

代码错误(如 Rocket 所说)。应该是

Math.floor(Math.random()*(anims.length))

但推理也有一个缺陷:Math.random() 不能返回“1”。

【讨论】:

    【解决方案2】:

    Math.random 不返回 1,它返回一个从 0 到 1 的值。Math.floor 基本上会截断该值的小数点。

    所以,如果Math.random 返回0.3984753005206585 并乘以4,我们得到1.593901202082634Math.floor 之后变成1

    当您想从数组中获取随机值时,将Math.random 乘以长度,因此它将返回介于 0 和长度之间的值(但绝不会返回长度)。

    上述代码中的anims.length + 1不正确。

    【讨论】:

    • 这应该是最佳答案,信息量很大。谢谢火箭
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多