1

可能重复:
生成 0 - 9 之间的随机数,但不是 6

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

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

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

4

2 回答 2

4

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

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;
}
于 2012-12-24T12:25:47.613 回答
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

于 2012-12-24T12:46:48.353 回答