虽然循环多个条件不会同时检查这两个条件

While loop multiple conditions don't check both conditions

本文关键字:条件 检查 两个 循环      更新时间:2023-09-26
var x = 0;
var y = 0;
while (x < 10 && y < 20){
  x += 1;
  y += 1;
  console.log('This is x: ', x)
  console.log('This is y: ', y)
}

我想我不明白循环中的多个条件是如何工作的。我希望代码要做的是继续循环,直到 x 大于 10 并且 y 大于 20,但是一旦 x 大于 10,循环就会停止。我认为&&意味着必须满足这两个条件。

我认为&&意味着必须满足这两个条件

确实如此。 x不再小于 10,因此不满足条件。 您需要一个 or,其中任一条件必须满足:

while (x < 10 || y < 20){

尽管在这种简单的情况下,循环仅由y变量控制,因为它们以相同的速率递增。

如果你想要两个条件(x 小于 10,y 也小于 20):

while (x < 10 && y < 20){

在您的示例中 x = 11,因此不满足此条件。

但是,如果您想要其中任一条件(x 小于 10 或 y 小于 20):

while (x < 10 || y < 20){

你想要x < 10 || y < 20,或者!(x >= 10 && y >= 20)从你的问题文本来看你可能会发现更清楚。

但请注意,x将超过 10 点。

我认为&&意味着必须满足这两个条件

实际上,这意味着必须同时满足这两个条件。一旦一个条件失败,循环就会结束。

正如其他人指出的那样,如果您希望满足任一条件,则必须使用 或:

while (x < 10 || y < 20){

至于您的预期输出,仅通过一个循环无法满足。您需要一个额外的条件:

while (y < 20){ // keep going until y == 20
  if(x < 10) {  // only increase/print x while < 10
     x += 1;
     console.log('This is x: ', x)
  }
  // always print y - since its the bigger one
  y += 1;
  console.log('This is y: ', y)
}

这只有效,因为您知道哪个数字会变大(y> x)。如果你事先不知道你的极限,但仍然想要类似的结果,你必须使用这样的代码:

int MAX_X = 10;
int MAX_Y = 20;

while (y < MAX_X || x < MAX_Y){ // keep going until both limits are reached
  if(x < MAX_X) {  // only increase/print x while < max_x
     x += 1;
     console.log('This is x: ', x)
  }
  if(y < MAX_Y) {  // only increase/print y while < max_y
     y += 1;
     console.log('This is y: ', y)
  }
}

这将持续到达到最大限制(无论它的 X 还是 Y 更大),但停止打印/增加较小的数字

condition1 && condition2将条件1和2替换为它们各自的布尔值(True/False)。

在您的情况下,一旦 x 越过 10,表达式就变为
False && Condition2总是False基本布尔代数)。

更正它
x<10 || y<10