为什么while循环不能与AND逻辑运算符一起使用?

时间:2016-05-04 05:14:03

标签: javascript loops while-loop

我正在尝试使用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(||)吗?我只是说这两个答案中的任何一个都没问题,警报可以运行吗?

我知道这是非常基本的东西,这可能是一个愚蠢的错误,但我只是一个初学者试图解决这个问题。

先谢谢。

4 个答案:

答案 0 :(得分:5)

您的陈述

answer != "yes" || answer != "yeah"
如果第一个或第二个条件为真,则

为真。在您的情况下,无论answer中的文本如何,其中一个条件始终为真。例如:

  • 如果answer="yes"则第二个条件为真
  • if answer="yeah"则第一个条件为真
  • if 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"则两个条件都为真且循环重复。

答案 1 :(得分:1)

实际上你的状况检查是错误的。

这是您的代码段

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

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

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

在上面的代码片段中,条件将始终为true,无论是"是"或者"是的"。你用(||)OR运算符绑定两个条件检查。

(||)OR操作是: -

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

所以,    (回答!="是)|| (回答!="是啊")总是要么你输入("是","是啊"或其他一些值)。

只有当条件返回false时,while循环才会中断,但在上面的情况下,它始终为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 

一旦条件包含任何值,条件就会中断("是"或"是啊")

答案 2 :(得分:0)

它需要是一个“和”因为要获得循环,你需要答案既不是“是”也不是“是”。如果测试是为了平等而不是不平等,那么你可以使用“或”。

答案 3 :(得分:0)

为什么不用递归来做这件事,为了更容易理解的条件,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();
  }
}