我需要代码运行,直到while的两个条件都为真,我使用逻辑AND(&&):
while ((A.i != B.i) && (A.j != B.j))
{
// do something
}
在运行时,循环停止,如果
A.i=B.i
没有检查第二个条件,我做错了什么?
答案 0 :(得分:4)
在使用GetPrinicpalBySamAccountName
运算符的条件语句中,仅在第一个条件为&&
时才评估第二个条件。这就是为什么当true
你立刻突破检查时
“我需要运行代码,直到while的两个条件都为真”
这让我感到困惑,因为如果您希望A.i==B.i
循环运行直到某些条件为while
,那么您不希望在true
中评估这些条件{1}}陈述..
如果您希望代码运行 UNTIL ,这两个条件都是真的,那么它应该是:
while()
答案 1 :(得分:3)
将您的&&
切换为||
你的循环说“当A.i不等于B.i和A.J不等于B.j”循环。一旦A.i等于B.i该语句不再为真,那么循环退出(它实际上并不关心那时的第二个相等)。通过使用OR,它将循环,直到两个条件都为假。
答案 2 :(得分:1)
不清楚,但我怀疑这就是你要找的东西
while ( !(A.i == B.i && A.j == B.j) )
与
相同while ( A.i != B.i || A.j != B.j) )
我想?
答案 3 :(得分: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)。无论如何,你只需要思考逻辑。在您的帖子中,您不清楚自己的意图,但可能只需要为&&
切换||
。
短路评估
听起来你想要运行逻辑的后半部分,可能是因为j
的getter有一些你想要的副作用(顺便说一下这不是一个好主意)。
如果您希望后半部分始终运行,则应使用|
代替||
。如果左侧是真的,||
运算符不会打扰右侧。同样,如果左侧是假的,&&
运算符也不会打扰右侧。这称为Short-circuit evaluation。
答案 4 :(得分:0)
因为A.i!= B.i评估为假,所以不需要完成条件