gpt4 book ai didi

javascript - 随机数,不等于前一个数

转载 作者:行者123 更新时间:2023-12-03 00:34:40 28 4
gpt4 key购买 nike

我需要获取随机数,但它不应该等于之前的数字。这是我的一段代码。但这不起作用。

function getNumber(){
var min = 0;
var max = 4;
var i;
i = Math.floor(Math.random() * (max - min)) + min;
if (i=== i) {
i = Math.floor(Math.random() * (max - min)) + min;
}
return i;
};

console.log(getNumber());

最佳答案

这个答案提出了三种尝试

  1. 一个简单版本,具有函数 getNumberlast 的属性,用于存储最后一个随机值。

  2. 该版本对 minmax 值使用闭包,如果 max 小于 则引发异常>分钟

  3. 结合了闭包和保留所有随机值并在适当时使用它的想法的版本。

<小时/>

一个

您可以使用 getNumber 的属性来存储最后一个数字并使用 do ... while 循环。

function getNumber() {
var min = 0,
max = 4,
random;

do {
random = Math.floor(Math.random() * (max - min)) + min;
} while (random === getNumber.last);
getNumber.last = random;
return random;
};

var i;
for (i = 0; i < 100; i++) {
console.log(getNumber());
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

<小时/>

两个

另一个提案,其中包含区间和最后一个随机值的闭包。

function setRandomInterval(min, max) {
var last;
if (min >= max) {
throw 'Selected interval [' + min + ', ' + max + ') does not work for random numbers.';
}
return function () {
var random;
do {
random = Math.floor(Math.random() * (max - min)) + min;
} while (random === last);
last = random;
return random;
};
}

var i,
getRandom = setRandomInterval(0, 4);

for (i = 0; i < 100; i++) {
console.log(getRandom());
}

setRandomInterval(4, 4); // throw error
.as-console-wrapper { max-height: 100% !important; top: 0; }

<小时/>

该提案使用的想法是最大限度地减少新随机数的调用。它使用两个变量,value 用于连续相同的随机值,count 用于保存相同值的计数。

如果给定了保存的计数并且该值不等于最后一个值,则该函数首先查找。如果发生这种情况,则返回保存的值并减少计数。

否则,将生成新的随机数并按上述方式进行检查(第一个提议)。如果该数字等于最后一个值,则计数会增加,并继续生成新的随机值。

因此,几乎所有先前生成的随机值都被使用。

function setRandomInterval(min, max) {
var last, // keeping the last random value
value, // value which is repeated selected
count = 0, // count of repeated value
getR = function () { return Math.floor(Math.random() * (max - min)) + min; };

if (min >= max) {
throw 'Selected interval [' + min + ', ' + max + ') does not work for random numbers.';
}
return function () {
var random;
if (count && value !== last) {
--count;
return last = value;
}
random = getR();
while (random === last) {
value = random;
++count;
random = getR();
}
return last = random;
};
}

var i,
getRandom = setRandomInterval(0, 4);

for (i = 0; i < 100; i++) {
console.log(getRandom());
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 随机数,不等于前一个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40056297/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com