我只是想从1到25生成8个随机数。我的问题是我已经有一个变量,其值为14,这就是我的问题是如何从1到25生成随机数,然后如果它们等于14,则用另一个随机数替换它?最后,我想在数组中包含8个随机数,但我不想在其中包含14个。谁能告诉我我所缺少的内容或如何使其更准确?有时我只能在数组中包含7个元素,有人知道为什么吗?
这是我的代码:
var arr = [];
var currentvar = 14;
for(var i = 0 ; i < 9; i++){
var num = Math.floor(Math.random()*25) + 1;
if(num === currentvar){
num = Math.floor(Math.random()*25) + 1;
}else{
arr.push(num);
}
}
console.log(arr);
答案 0 :(得分:2)
仔细研究您实现的逻辑。您恰好遍历了9次循环(而不是8次),并且由于if...else
控制流,每次迭代都有互斥的结果。
如果num
等于currentvar
(您应该通过从第二个分配中删除var
来正确执行此操作),则重新分配或,将其添加到数组中,一次都不要添加。这就是else
的意思,并且您可能想让do...while
循环分配num
直到,它不等于currentvar
。
var arr = [];
var currentvar = 14;
var num;
for (var i = 0; i < 8; i++) {
do {
num = Math.floor(Math.random() * 25) + 1;
} while (num === currentvar);
arr.push(num);
}
console.log(arr);
或者,如果您想保留if...else
语句,则可以递减循环计数器i
,而不是在num === currentvar
时重复循环:
var arr = [];
var currentvar = 14;
for (var i = 0; i < 8; i++) {
var num = Math.floor(Math.random() * 25) + 1;
if (num === currentvar) {
i--;
} else {
arr.push(num);
}
}
console.log(arr);