Javascript if-else解释

时间:2015-06-26 00:17:46

标签: javascript if-statement syntax while-loop

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

如果输入大于程序可用选项的范围,程序将错误输出并破坏浏览器。我已经尝试以各种方式重新排列脚本的嵌套,以了解JS“思考”的方式。不幸的是,我仍然没有掌握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>

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

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

&#13;
&#13;
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);
      }
    }

  }

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

答案 1 :(得分:1)

首先,你重复你的随机生成,所以我将其分解为一个函数。其次,你的逻辑是错误的(猜测有可能是0个手指以及6个手指的可能性非常小)。

Math.random实际执行的操作是返回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

添加这些更改,您的代码应该可以正常运行。