无法使用||退出循环操作者

时间:2015-11-23 03:48:53

标签: java operators short-circuiting

你能解释一下,为什么我的代码"挂起"当我在循环中使用短路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);

当我使用||时运算符,在我的情况下对我来说似乎合乎逻辑,我的程序的运行永远不会停止。但是,当我使用&&操作员,对我来说似乎不合逻辑,它完美无缺。你能解释一下我为什么不能使用||退出循环操作

2 个答案:

答案 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.

了解有关此内容的更多信息