我正在尝试进行测验,我需要5个随机问题,以使其起作用,我创建了随机变量(rnd-rnd5),因为我需要在两个函数中使用这些变量。我需要制作非重复变量,但是下面的解决方案不起作用。如果可能的话,我需要“基本的”解决方案,因为我们的老师希望我们拥有一个“与我们同等水平”的代码。
var rnd = [Math.floor(Math.random() * 29) + 0];
var rnd2 = [Math.floor(Math.random() * 29) + 0];
while (rnd2 !== rnd){
rnd2 = Math.floor(Math.random() * 29) + 0;
}
var rnd3 = [Math.floor(Math.random() * 29) + 0];
while (rnd3 !== rnd && rnd3 !== rnd2){
rnd3 = Math.floor(Math.random() * 29) + 0;
}
var rnd4 = [Math.floor(Math.random() * 29) + 0];
while (rnd4 !== rnd && rnd4 !== rnd2 && rnd4 !== rnd3){
rnd4 = Math.floor(Math.random() * 29) + 0;
}
var rnd5 = [Math.floor(Math.random() * 29) + 0];
while (rnd5 !== rnd && rnd5 !== rnd2 && rnd5 !== rnd3 && rnd5 !== rnd4){
rnd5 = Math.floor(Math.random() * 29) + 0;
}
答案 0 :(得分:0)
您遇到了一些问题:
您正在生成具有单个成员(随机数)的 array 。数组always not equal与其他数组以及除其自身以外的其他任何值。看起来好像您想要一个普通变量,因此只需要删除[
调用周围的]
和Math.floor
。
您还可以进行向后检查-如果当前编号与旧编号不等于,则您正在生成新编号。这意味着您将一直生成,直到两者相同为止。您只需要执行相反的检查===
。
您正在使用AND &&
进行检查,其中您需要使用OR
进行检查,以查找先前数字中的任何是否匹配。
这将产生工作代码:
var rnd = Math.floor(Math.random() * 29) + 0;
var rnd2 = Math.floor(Math.random() * 29) + 0;
while (rnd2 === rnd){
rnd2 = Math.floor(Math.random() * 29) + 0;
}
var rnd3 = Math.floor(Math.random() * 29) + 0;
while (rnd3 === rnd || rnd3 === rnd2){
rnd3 = Math.floor(Math.random() * 29) + 0;
}
var rnd4 = Math.floor(Math.random() * 29) + 0;
while (rnd4 === rnd || rnd4 === rnd2 || rnd4 === rnd3){
rnd4 = Math.floor(Math.random() * 29) + 0;
}
var rnd5 = Math.floor(Math.random() * 29) + 0;
while (rnd5 === rnd || rnd5 === rnd2 || rnd5 === rnd3 || rnd5 === rnd4){
rnd5 = Math.floor(Math.random() * 29) + 0;
}
console.log(rnd, rnd2, rnd3, rnd4, rnd5)
话虽如此,如果您generate non-random numbers first, then jumble them and pick however many you need,则可以更轻松地生成随机的非重复数字。
答案 1 :(得分:0)
创建数字数组
var numbers = [];
for(var i=0; i<30; ++i) numbers.push(i);
通过从0到29(i)随机排列数字,在每个循环中选择一个随机数0-29(j)并交换索引i,j的值。
for(var i=0; i<30; ++i) {
var j = Math.floor(Math.random()*30);
var tmp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = tmp;
}
前n个数字(5)是随机且唯一的:
for(var i=0; i<5; ++i) {
console.log(numbers[i]);
}