javascript - 生成一个新的随机数

时间:2012-04-17 10:24:06

标签: javascript

我有一个数字在1-3之间的变量。

我需要在1-3之间随机生成一个新数字,但它不能与最后一个相同。

它发生在循环中数百次。

最有效的方法是什么?

6 个答案:

答案 0 :(得分:5)

模块算术的力量可以帮助你!!

此函数使用模运算符执行您想要的操作:

/**
 * generate(1) will produce 2 or 3 with probablity .5
 * generate(2) will produce 1 or 3 with probablity .5
 * ... you get the idea.
 */
function generate(nb) {
    rnd = Math.round(Math.random())
    return 1 + (nb + rnd) % 3
}

如果你想避免函数调用,你可以内联代码。

答案 1 :(得分:2)

这是一个解决问题的jsFiddle:http://jsfiddle.net/AsMWG/

我创建了一个包含1,2,3的数组,首先我选择任意数字并将其与最后一个元素交换。然后我只从位置0和1中选择元素,并将它们与最后一个元素交换。

答案 2 :(得分:1)

var x = 1; // or 2 or 3
// this generates a new x out of [1,2,3] which is != x
x = (Math.floor(2*Math.random())+x) % 3 + 1;

答案 3 :(得分:0)

您可以使用内置于javascript的随机数生成器随机生成数字。您需要使用Math.random()

如果您是push() - 进入数组,您可以随时检查先前插入的数字是否是相同的数字,从而重新生成数字。这是一个例子:

var randomArr = [];
var count = 100;
var max = 3;
var min = 1;

while (randomArr.length < count) {
    var r = Math.floor(Math.random() * (max - min) + min);

    if (randomArr.length == 0) {
        // start condition
        randomArr.push(r); 
    } else if (randomArr[randomArr.length-1] !== r) { 
        // if the previous value is not the same 
        // then push that value into the array
        randomArr.push(r);
    }
}

答案 4 :(得分:0)

代码经过测试,它可以满足您的需求。

var RandomNumber = {

    lastSelected: 0,

    generate: function() {

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

        if(random == this.lastSelected) {
            generateNumber();
        }
        else {
            this.lastSelected = random;
            return random;
        }
    }
}


RandomNumber.generate();

答案 5 :(得分:0)

Widor评论说,生成这样的数字相当于生成概率为0.5的数字。所以你可以尝试这样的事情(未经测试):

var x; /* your starting number: 1,2 or 3 */
var y = Math.round(Math.random()); /* generates 0 or 1 */

var i = 0;
var res = i+1;
while (i < y) {
   res = i+1;
   i++;
   if (i+1 == x) i++;
}