我必须生成3个随机数从0到9每2秒,它的工作,但会有实例,我会得到重复的值,例如4 7 7。如果有人能指出我的错误那就太好了,谢谢
if (firstNum == secondNum || firstNum == thirdNum) {
firstNum = Math.floor((Math.random() * 9) + 1);
} else if (secondNum == firstNum || secondNum == thirdNum) {
secondNum = Math.floor((Math.random() * 9) + 1);
} else if (thirdNum == firstNum || thirdNum == secondNum) {
thirdNum = Math.floor((Math.random() * 9) + 1);
}发布于 2020-02-03 22:50:55
保持简单
setInterval(function(){
let first_number = parseInt(Math.random()*10),
second_number = null,
third_number = null;
while (second_number == third_number || first_number == second_number || third_number == second_number){
second_number = parseInt(Math.random()*10);
third_number = parseInt(Math.random()*10);
}
console.log(first_number, second_number, third_number)
},2000)
发布于 2020-02-03 22:42:17
你需要去掉那些"else“。如果firstNum等于secondNum或thirdNum,则它不会验证其他值是否相等,因为它在第一个if时停止。
试试这个:
if (firstNum == secondNum || firstNum == thirdNum) {
firstNum = Math.floor((Math.random() * 9) + 1);
}
if (secondNum == firstNum || secondNum == thirdNum) {
secondNum = Math.floor((Math.random() * 9) + 1);
}
if (thirdNum == firstNum || thirdNum == secondNum) {
thirdNum = Math.floor((Math.random() * 9) + 1);
}发布于 2020-02-03 23:05:22
当你只寻找3个数字时,If语句可以工作,但如果你寻找更多的数字,这将是一场噩梦。请考虑以下解决方案:
const uniqueNumbers = [];
while (uniqueNumbers.length < 3) {
const number = Math.floor((Math.random() * 9) + 1);
if (!uniqueNumbers.includes(number)) {
uniqueNumbers.push(number)
}
}
console.log(uniqueNumbers)
请注意,上面的代码是一个简单的示例,它没有验证范围。如果你不小心(比如说,你想要1-10范围内的20个唯一的数字),你可能会陷入无限循环。
https://stackoverflow.com/questions/60041315
复制相似问题