【问题标题】:Why is this while loop not working with an AND logical operator?为什么这个 while 循环不能与 AND 逻辑运算符一起使用?
【发布时间】:2016-08-29 09:00:11
【问题描述】:

我正在尝试使用 javascript 运行一个超级简单的程序,但我无法解决这个问题。好的,这是我的代码:

var answer = prompt("Are we there yet?");

while(answer != "yes" || answer != "yeah") {
    var answer = prompt("Are we there yet?");
}

alert("Yes! We made it!");

问题是,当我在浏览器上运行它并键入"yes""yeah" 时,提示方法会一直出现,除非我将逻辑运算符从 OR(||) 更改为 AND(&&)。

不应该与 OR(||) 一起使用吗?我不是只是说这两个答案中的任何一个都可以并且警报可以运行吗?

我知道这是非常基本的东西,这可能是一个愚蠢的错误,但我只是一个试图弄清楚这一点的初学者。

提前致谢。

【问题讨论】:

  • 您正在根据答案变量执行循环。答案变量中的值是“是”或“是”。两者同时不可能。但是当您应用 AND 运算符时,它会检查答案值“是”和“是”,这是不可能的。这就是为什么您的循环无法正常工作的原因

标签: javascript loops while-loop


【解决方案1】:

你的陈述

answer != "yes" || answer != "yeah"

如果第一个或第二个条件为真,则为真。在您的情况下,无论answer 中的文本如何,条件之一都将始终为真。例如:

  • 如果answer="yes" 则第二个条件为真
  • 如果answer="yeah" 则第一个条件为真
  • 如果answer="whatever" 则两个条件都为真

你需要改用&&:

var answer = prompt("Are we there yet?");
while(answer != "yes" && answer != "yeah") {
    var answer = prompt("Are we there yet?");
}
alert("Yes! We made it!");

只有当这两个条件都满足时才会成立。例如:

  • 如果answer="yes" 则第一个条件为假,第二个条件为真。总体结果为假,您将退出循环。
  • 如果answer="yeah" 则第一个条件为真,第二个条件为假。总体结果为假,您将退出循环。
  • 如果answer="whatever" 则两个条件都为真并重复循环。

【讨论】:

    【解决方案2】:

    它必须是“和”,因为要获得循环,您需要的答案既不是“是”也不是“是”。如果测试是针对相等而不是不相等,那么您将使用“或”。

    【讨论】:

      【解决方案3】:

      你为什么不用递归来做这个,为了更好地理解条件,JsFiddle

      var answer = prompt("Are we there yet?");
      func();
      
      function func() {
        if (answer == "yes" || answer == "yeah") {
          alert("Yes! We made it!");
        } else {
          answer = prompt("Are we there yet?");
          func();
        }
      }
      

      【讨论】:

        【解决方案4】:

        其实你的条件检查是错误的。

        这是你的代码 sn-p

         var answer = prompt("Are we there yet?");
        
         while(answer != "yes" || answer != "yeah") {
            var answer = prompt("Are we there yet?");
          }
        
          alert("Yes! We made it!");
        

        在上面的代码 sn-p 中,while 条件无论是“是”还是“是”,都将始终为真。您正在使用 (||) OR 运算符绑定两个条件检查。

        (||) OR 运算是:-

        true  || true = true
        true  || false = true
        false || true = true
        false || false = false
        

        所以, (answar != "yes) || (answar != "yeah") 将始终为真,无论您键入(“yes”,“yeah” 或其他值)。

        while 循环仅在条件返回 false 时才会中断,但在上述情况下它始终为 true。所以它会创建无限循环。

        让我们试试这个:-

        var answer = prompt("Are we there yet?");
        
        while(answer != "yes" && answer != "yeah") {
            var answer = prompt("Are we there yet?");
        }
        
        alert("Yes! We made it!"); 
        

        由于 (&&) AND 操作行为,一旦提示中给出任何值(“是”或“是”),这将打破无限循环。

        (&&) AND 操作行为:-

        true && false = false
        false && true = false
        false && false = false
        true  && true = true 
        

        所以条件一旦包含任何值(“是”或“是”)就会被打破

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-18
          相关资源
          最近更新 更多