【问题标题】:Javascript if-else interpretationJavascript if-else 解释
【发布时间】:2015-09-12 19:13:54
【问题描述】:

这个小程序应该让浏览器猜测用户输入的内容。这是“多少根手指”。所以我希望它强制用户使用 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>

非常感谢所有帮助。

【问题讨论】:

  • 是的,你是对的......我一只手上没有 7 个或更多的手指。
  • 手指数量不要输入3.14159...

标签: javascript if-statement syntax while-loop


【解决方案1】:

您需要将测试更改为if (a &gt;= b)。代码猜测从05 的数字,因此如果用户输入6,它将永远不会匹配。但是a &gt; 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>

【讨论】:

  • 谢谢 Barmar,在这里我衷心感谢您的帮助!
【解决方案2】:

首先,您正在重复随机生成,因此我将其分解为一个函数。其次,您的逻辑是错误的(猜测有可能是 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

添加这些更改,您的代码应该可以工作。

【讨论】:

  • 我理解设置函数的建议,但我不明白你在数学上的意思。我得把它看一遍,弄乱它一些才能掌握它。并感谢您的帮助!
  • 好吧,(0 to 1)*6 可以给出介于06 之间的值,对吧?这意味着您最终可能会得到06,这两个值对于您的目的都是无效的。 ((0 to 1)*4)+1 总是会给出介于 1(+1)和 5(((0 到 1)*4)部分)之间的值,这就是您所追求的。
  • 10-4 我现在明白了。它可以生成 0,这没关系,因为我可以举起 0 个手指,但它不会生成 1。这确实让我想调整它,以便您不能选择小于 0。再次感谢您的输入! “Math.random() 函数返回 [0, 1) 范围内的浮点伪随机数,即从 0(包括)到但不包括 1(不包括)”developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 哦,好的。那么你的数学就很好了。只是可能仍将您的b 变量更改为5,将其分解为一个函数,然后运行x = Math.floor(x * (amountOfFingers+1))。并不是因为执行的逻辑有很大的不同,而是它更清晰易懂。编写清晰的代码只是一个好习惯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2015-05-16
  • 2019-02-14
  • 1970-01-01
  • 2014-05-24
相关资源
最近更新 更多