Javascript if-else 解释

Javascript if-else interpretation

这个小程序应该让浏览器猜测用户输入的内容。是 "how many fingers"。所以我希望它强制用户使用数字 5 或更少。

如果输入大于程序可用的选项范围,程序将出错并破坏浏览器。我尝试以各种方式重新排列脚本的嵌套,以了解 JS "thinks" 的工作原理。不幸的是,我仍然不了解 Javascript 是如何解释代码流程的。

我在工作中使用SQL并且熟悉PEMDAS在数学上的逻辑。我认为这是一种类似的情况,我遗漏了一些语法的逻辑含义。在我看来,这是一个非常简单的程序。

我不明白为什么当我的输入满足执行 IF 子句的条件时程序不执行警报。它在 Else 子句上运行良好。

document.getElementById("guess").onclick = function() {

  var a = document.getElementById("myNumber").value;
  var b = 6;
  var x = Math.random();
  x = x * b;
  x = Math.floor(x);

  if (a > b) {

    alert("you don't have that many fingers");

  } else {

    var gotit = false;
    var guesses = 1;

    while (gotit == false) {

      if (a == x) {
        gotit = true;
        alert("Success! the answer is" + x + " or " + a + " it took me " + guesses + " guesses!");
      } else {
        guesses++;
        var x = Math.random();
        x = x * b;
        x = Math.floor(x);
      }
    }

  }

}
<p>How many fingers are you holding up?</p>
<input id="myNumber" />
<button id="guess">Guess!</button>

非常感谢所有帮助。

您需要将测试更改为 if (a >= b)。该代码猜测从 05 的数字,因此如果用户输入 6,它将永远不会匹配。但是 a > b 只有在输入 7 或更高时才会成功 - 6 不大于 b.

document.getElementById("guess").onclick = function() {

  var a = document.getElementById("myNumber").value;
  var b = 6;
  var x = Math.random();
  x = x * b;
  x = Math.floor(x);

  if (a >= b) {

    alert("you don't have that many fingers");

  } else {

    var gotit = false;
    var guesses = 1;

    while (gotit == false) {

      if (a == x) {
        gotit = true;
        alert("Success! the answer is " + x + " or " + a + " it took me " + guesses + " guesses!");
      } else {
        guesses++;
        var x = Math.random();
        x = x * b;
        x = Math.floor(x);
      }
    }

  }

}
<p>How many fingers are you holding up?</p>
<input id="myNumber" />
<button id="guess">Guess!</button>

首先,您要重复随机生成,所以我将其分解为一个函数。其次,你的逻辑是错误的(有可能是0根手指,也有极小的可能是6根手指)。

Math.random 实际上做的是 returns 01 之间的值,所以我想你可以看到那里的逻辑错误 (0 to 1)*6 = possibly 0 or 6

因此,如果您从计算函数开始

  function getRandomFinger(amountOfFingers) {
    var x = Math.random();
    x = (x * (amountOfFingers-1))+1; // ((0 to 1)*4)+1 because always at least one finger but possibly 4 more
    return Math.round(x);
  }

您可以在需要时调用它。然后实际定义手指的数量更有意义,对吧?不止是一些看似随机的数字。

  var b = 5; // 5 fingers on the hand

添加那几处更改,您的代码应该可以工作。