【发布时间】:2016-02-25 02:41:50
【问题描述】:
您能否解释一下为什么当我在循环中使用短路或时我的代码“挂起”?
我写了一个代码来计算两个整数的最大公因数:
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);
当我使用 ||操作员,对我来说似乎合乎逻辑的是,我的程序的运行永远不会停止。但是,当我使用 && 运算符时,对我来说似乎不合逻辑的东西,它工作得很好。你能解释一下为什么我不能使用 || 退出循环吗?运营商?
【问题讨论】:
-
你为什么期望它们都为零?
-
工作表达式的正确德摩根变换是
while (!(a == 0 || b == 0))。 -
有一种情况,其中任何一个都为零,在这种情况下,如果您使用短路 OR 运算符,第二个参数将始终为 true ...请在这种情况下使用短路 AND 运算符。 ..所以如果其中一个为零,则停止循环...
标签: java operators short-circuiting