如何生成两个不同的随机数?

Fra*_*sta 11 javascript random algorithm

我需要生成两个不同的随机数,它们不能彼此相等或与第三个数相等.我尝试使用很多if来涵盖所有可能性但是,似乎我的算法技能并不那么好.

谁可以帮我这个事?

var numberOne = Math.floor(Math.random() * 4);
var numberTwo = Math.floor(Math.random() * 4);
var numberThree = 3; // This number will not always be 3

if((numberOne == numberThree) && (numberOne + 1 < 3)) {
    numberOne++;
} else if ((numberOne == numberThree) && (numberOne + 1 == 3)) {
    numberOne = 0;
}

if ((numberOne == numberTwo) && (numberOne+1 < 3)) {
    if (numberOne+1 < 3) {
        numberOne++;
    } else if(numberThree != 0) {
        numberOne = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止,下一步将是:

if (numberTwo == numberThree) {
    (...)
}
Run Code Online (Sandbox Code Playgroud)

我的思路是否正确?注意:生成的数字需要介于0和3之间.提前感谢.

Tas*_* K. 7

您可以运行while循环,直到所有数字都不同.

// All numbers are equal
var numberOne = 3; 
var numberTwo = 3; 
var numberThree = 3; 

// run this loop until numberOne is different than numberThree
do {
    numberOne = Math.floor(Math.random() * 4);
} while(numberOne === numberThree);

// run this loop until numberTwo is different than numberThree and numberOne
do {
    numberTwo = Math.floor(Math.random() * 4);
} while(numberTwo === numberThree || numberTwo === numberOne);
Run Code Online (Sandbox Code Playgroud)

以下是基于@jfriend00的建议http://jsfiddle.net/x4g4kkwc/1的上述代码的jsfiddle .

这是最初的工作演示:http://jsfiddle.net/x4g4kkwc/

  • 你真的应该干这个了.为什么不至少使用`do {} while()`循环而不是普通的`while()`并删除`Math.floor(Math.random()*4)的四个副本中的两个` (3认同)