我对javascript非常陌生。在我的课堂上,我们为随机数生成器编写了代码,但我的代码无法正常工作。我想知道是否有人可以看看并告诉我我做错了什么。我认为我的语法在循环上是错误的,但不能确定。
function lottoGen() {
var i = 0; //Variable for increment
var d = 0; //Variable for decrement
var arr2 = [0, 0, 0, 0, 0, 0]; //6 array values. Begin at 0
arr2[5] = Math.random(1, 26); //Choose random number for position 5 in array
while (i <= 4) { //Perform loop while i <= 4
arr2[i] = Math.random(1, 69);
d = i;
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
i--;
}
i++;
}
}
document.getElementById("lotto").innerHTML = arr2; //Print the array
}
<p>Lottery Number Generator</p>
<form>
<button onclick="lottoGen()">Generate</button>
<p id="lotto"></p>
答案 0 :(得分:2)
在第一次迭代中,i
为0,因此d
也为零,因此此块:
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
i--;
}
i++;
}
}
不会以d is 0的方式运行,因此i
不会递增,最终会陷入无限循环。您实际上总是想遍历数组:
while (i <= 4) { //Perform loop while i <= 4
arr2[i] = Math.random(1, 69);
d = i;
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
i--;
}
}
i++; // <<<
}
另外,Math.random()
不接受任何参数,并返回从0到1的数字,因此要获得某个范围内的整数,您必须使用一个小的实用程序:
const random = (min, max) => min + Math.floor((max - min) * Math.random());
console.log(random(1, 69));
PS:说实话,您的代码实际上很难理解,注释实际上并没有帮助。与其描述代码,不如描述在那里要实现的目标:
// Step through the array and fill it with random numbers
while (i <= 4) {
arr2[i] = random(0, 69);
d = i;
// Check all positions to the left if the number is already taken
while (d !== 0 && d <= 4) {
d--;
if (arr2[i] === arr2[d]) {
// If thats the case, stay at this position and genrate a new number
i--;
}
}
i++;
}
我该怎么写:
function lottoGen() {
const result = [];
for(let count = 0; count < 6; count++) {
let rand;
do {
rand = random(0, 69);
} while(result.includes(random))
result.push(rand);
}
return result;
}