While 循环有两个 true 条件,但它只验证一个

While loop with two true conditions but it only validate one

我需要 运行 的代码,直到此时的两个条件都为真,我正在使用逻辑与 (&&):

while ((A.i != B.i) && (A.j != B.j))
{
    // do something
}

在运行,如果

循环停止
A.i=B.i 

没有检查第二个条件,我做错了什么?

在使用 && 运算符的条件语句中,仅当第一个条件为 true 时才计算第二个条件。这就是为什么当A.i==B.i你立即突破支票

"I need the code to run until both conditions at the while are true"

这让我很困惑,因为如果你想要一个 while 循环到 运行 直到 某些条件是 true,那么你不会希望在 while() 语句中评估这些条件..

如果您希望您的代码 运行 UNTIL 这两个条件都为真,那么它确实应该是:

// Keep running while EITHER A.i is equal to B.i OR A.j is equal to B.j
while ((A.i == B.i) || (A.j == B.j))
{
    // do something
}

将您的 && 切换为 ||

你的循环说 "while A.i is not equal to B.i AND A.J is not equal to B.j" 循环。一旦 A.i 等于 B.i 该语句不再为真,因此循环退出(此时它实际上并不关心第二个相等性)。通过使用 OR 它将循环直到两个条件都为假。

因为 A.i != B.i 计算结果为 false 所以不需要完成条件

不清楚,但我怀疑这就是您要查找的内容

while ( !(A.i == B.i && A.j == B.j) )

相同
while ( A.i != B.i || A.j != B.j) )

我觉得?

OP,你的问题不是很清楚,但我很确定你遇到了两个问题之一。

  1. 这是一个很常见的逻辑错误

    while (a == b) || (c == d)
    

    相同
    until (a != b) && (c != d)
    

    同时,

    while (a != b) && (c != d)
    

    相同
    until (a == b) || (c == d)
    

    请注意,当您从 == 切换到 != 时,您还需要将 && 切换为 ||。许多开发者都错过了这种非常明显的逻辑翻转(参见 De Morgan's Laws)。不管怎样,你只需要想清楚逻辑。从您的 post 来看,您的意图尚不清楚,但您可能只需要将 && 切换为 ||

  2. 短路评估

    听起来你想要 运行 的逻辑的后半部分,也许是因为 j 的 getter 有一些你想要的副作用(顺便说一下,这不是'这不是个好主意)。

    如果您希望后半部分总是 运行,您应该使用 | 而不是 ||。如果左侧为真,则 || 运算符不会理会右侧。同样,如果左侧为假,&& 运算符也不会理会右侧。这叫做Short-circuit evaluation.