基本上我正在创建一个网格并在其上绘制点,并且没有两个点可以在完全相同的位置[(3,4)不同于(4,3)]。y 坐标必须在 2 和 7 之间(因此 2、3、4、5、6、7),x 坐标必须在 1 和 7 之间。我有一个 getRandom 函数(如下所示),它生成一个最小和最大范围之间的随机数。这是我到目前为止所拥有的。
var xposition = [];
var yposition = [];
var yShouldBeDifferentThan = []
function placeRandom() {
for (s=0; s<xposition.length ; s++ ) {
if (xposition[s] == x) { // loops through all numbers in xposition and sees if the generated x is similar to an existing x
yShouldBeDifferentThan.push(yposition[s]); //puts the corresponding y coordinate into an array.
for (r=0; r<yShouldBeDifferentThan.length; r++) {
while (y == yShouldBeDifferentThan[r]) {
y = getRandom(2,7);
}
}
}
}
xposition.push(x);
yposition.push(y);
}
问题是,如果
xposition = [1, 5, 5, 7, 5, 5]
yposition = [1, 3, 7, 2, 3, 6]
yShouldBeDifferentThan = [3, 7, 3, 6]
首先,它会生成一个与 3 不同的随机数,比如 6。然后(我认为)它会看到:6 == 7
? 它没有。6 == 3
? 它没有。6 == 6?确实如此,因此生成一个不同于 6 的随机数。这就是问题所在,它可能会生成数字 3。我的getRandom
函数如下:
function getRandom(min, max) {
return min + Math.floor(Math.random() * (max - min + 1));
}
我正在考虑制作这个getRandom
函数,以便我也可以根据需要排除数字,但我不知道该怎么做。如果我可以让它排除数字,而不是在placeRandom
函数的最后一个 while 循环中,也许我可以做类似的事情:
y = getRandom(2,7) // excluding all numbers which already exist in the ShouldBeDifferentThan array
indexOf
另外,请注意,由于我使用的是 Internet Explorer 8 ,因此无法使用该方法。