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,你的问题不是很清楚,但我很确定你遇到了两个问题之一。
这是一个很常见的逻辑错误
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 来看,您的意图尚不清楚,但您可能只需要将 &&
切换为 ||
。
短路评估
听起来你想要 运行 的逻辑的后半部分,也许是因为 j
的 getter 有一些你想要的副作用(顺便说一下,这不是'这不是个好主意)。
如果您希望后半部分总是 运行,您应该使用 |
而不是 ||
。如果左侧为真,则 ||
运算符不会理会右侧。同样,如果左侧为假,&&
运算符也不会理会右侧。这叫做Short-circuit evaluation.
我需要 运行 的代码,直到此时的两个条件都为真,我正在使用逻辑与 (&&):
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,你的问题不是很清楚,但我很确定你遇到了两个问题之一。
这是一个很常见的逻辑错误
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 来看,您的意图尚不清楚,但您可能只需要将&&
切换为||
。短路评估
听起来你想要 运行 的逻辑的后半部分,也许是因为
j
的 getter 有一些你想要的副作用(顺便说一下,这不是'这不是个好主意)。如果您希望后半部分总是 运行,您应该使用
|
而不是||
。如果左侧为真,则||
运算符不会理会右侧。同样,如果左侧为假,&&
运算符也不会理会右侧。这叫做Short-circuit evaluation.