【问题标题】:How to avoid a condition from looping?如何避免条件循环?
【发布时间】:2021-12-03 10:23:33
【问题描述】:

我必须为 JavaScript 编写控制台宾果游戏。这是我将参加的训练营之前必须做的一些练习之一,所以请记住我是新手。 如果有人不知道这个游戏:

  • 您将拥有一张显示 15 个数字(不重复且随机)的“卡片”
  • 每回合都会显示一个随机数字(宾果球)。
  • 数字从 1 到 90,因此无论是球还是宾果卡都会有这些数字。
  • 当球的号码与您卡片中的一个号码相同时,您的卡片号码将更改为“X”。

现在我已经解释过了,我的问题如下: 我有一个函数可以生成一个每回合随机数的球。为了知道一个号码是否已经出局,我创建了一个数组来推送已经出局的号码。这样,我们可以使用 if 条件创建一个循环来检查球是否与 arrays[i] 数字具有相同的值。 我这样做的方式,开始很好,但最终弄乱了 chrome 的控制台......尽可能接近数组中的 90 个数字,它开始迭代数组并生成随机数,直到找到最后一个剩余数量。

我将在下面粘贴我正在谈论的代码部分。

function bingo(){
   console.table(bingoCard);
   bombo();
   for (let i = 0; i < bingoCard.length; i++){
      if (bola === bingoCard[i].number){
         bingoCard[i].number = 'X';
         bingoCard[i].matched = true;
      }
   }
   continuar = confirm('¿Continuar?');

   if (continuar === true){
      console.table(bingoCard);
      bingo();
   }else {
      return 'Hasta la próxima';
   }
}

function randomNum(){
   let min = 1;
   let max = 90;
   return Math.floor(Math.random() * (max - min) + min);
}
         
function bombo(){

   bola = randomNum();
   console.log(+ bola + 'antes de bucle'); //test
   for (let i = 0; i < numbersOut.length; i++){
      if (bola === numbersOut[i]){
         bingo();
      }
   }
   numbersOut.push(bola);
   console.log(numbersOut);
   alert('Ha salido el número ' + bola);   
}

【问题讨论】:

    标签: javascript if-statement random infinite-loop


    【解决方案1】:

    您可以创建一个包含 1 到 90 数字的数组并随机打乱它。

    function shuffleArray(array) {
        for (let i = array.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [array[i], array[j]] = [array[j], array[i]];
        }
    }
    

    https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modern_method - 如果你想了解这个方法

    【讨论】:

    • 或更短的:stackoverflow.com/a/25984542/295783function fy(a,b,c,d){c=a.length;while(c)b=Math.random()*c--|0,d=a[c],a[c]=a[b],a[b]=d}
    • 我就是这样做的。工作得很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多