【问题标题】:Two random numbers [duplicate]两个随机数[重复]
【发布时间】:2012-12-24 12:22:43
【问题描述】:

可能重复:
Generate random between 0 - 9 but not 6

var ifanse=Math.floor(Math.random()*4)+1; 

var ifanse2=Math.floor(Math.random()*3)+1

这是 2 个随机数。有时它们相等,但如果ifanse 等于ifanse2,它会重新生成一个介于 3 - 1 但不包括ifanse2 的随机数。或者有什么办法可以避免一开始就等于?

【问题讨论】:

  • 所以你不希望它们完全随机?
  • 真的吗?你没有从你昨天提出的问题中得到什么都没有吗?您可以使用相同的 do-while 循环...
  • 我希望它们是随机的,但它们不应该相等。
  • @H2CO3 也许你可以这么说。但是上一个答案中的某些方法似乎不适合变量和随机需求。我会尝试现在做的,我没有测试过。

标签: javascript random


【解决方案1】:

你可以循环直到你选择一个不同的数字:

var ifanse=Math.floor(Math.random()*4)+1; 
var ifanse2=Math.floor(Math.random()*3)+1;
while (ifanse2 == ifanse)
{
   ifanse2=Math.floor(Math.random()*3)+1;
}

【讨论】:

  • 有时 ifanse 会生成 4。我希望它被限制在 3 以内。
  • 然后将*4 替换为*3 ..
【解决方案2】:

例如,您可以编写一个通用函数,为您提供一个随机数数组

  • 用您的范围内的数字填充和排列 这将消除重复的数字
  • 改组数组
  • 返回一个长度数组,其中包含您想要的随机数的计数

  function genRand(min, max, cnt) {
      var arr = [];
      for (var i = min, j = 0; i <= max; j++, i++)
      arr[j] = i
      arr.sort(function () {
          return Math.floor((Math.random() * 3) - 1)
      });

      return arr.splice(0, cnt)
  }

console.log(genRand(0, 3, 2)) // e.g [0,3]

然后您可以将它们存储在您的 var 中,或直接从 rands 访问它们

var rands = genRand(0,3,2);
var ifanse = rands[0]
var ifanse2 = rands[1]

你永远不会得到 2 个相等的数字,如果你需要的话,你可以生成超过 2 个不同的兰特。

这是Jsbin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2014-12-19
    • 2016-02-16
    • 1970-01-01
    • 2014-03-20
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多