你能解释一下,为什么我的代码"挂起"当我在循环中使用短路OR时?
我编写了一个代码来计算两个整数的最大公因子:
int a = 9; int b = 6; while (a != 0 || b != 0) //here is the problem { if (a >= b) { a = a - b; } else b = b - a; } if (a == 0) System.out.println(b); else System.out.println(a);
当我使用||时运算符,在我的情况下对我来说似乎合乎逻辑,我的程序的运行永远不会停止。但是,当我使用&&操作员,对我来说似乎不合逻辑,它完美无缺。你能解释一下我为什么不能使用||退出循环操作
答案 0 :(得分:1)
让我们逐步检查输出(每个步骤对应一个循环):
第1步:
a >= b is true so a is now equal to 3
第2步:
b >= a is true so b is now equal to 3
第3步:
a >= b is true so a is now equal to 0
我们到此为止。当一个OR b不等于0时,while循环将继续运行。在所有后续循环中,b将被设置为3 - 0并且值将永远不会改变 - 它将无限运行。如果您的目标是在1值达到0时停止循环,则需要和&&言。
答案 1 :(得分:0)
使用AND,你说"如果一个为零,退出循环。"如果您使用OR,则表示"如果两者都为零,则退出循环"。它与你的想法相反,这就是你可能会感到困惑的原因。当你否定像这样的布尔运算符时,AND变为OR,反之亦然。您可以从DeMorgan's Laws.
了解有关此内容的更多信息