使用JavaScript的乐透号码随机生成器

时间:2018-10-26 22:10:40

标签: javascript printing while-loop

我对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>

1 个答案:

答案 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;
}