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

Cannot exit the loop using || operator

你能解释一下为什么当我在循环中使用短路 OR 时我的代码 "hangs" 吗?

我写了一个代码来计算两个整数的最大公约数:

  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);

当我使用||操作员,在我看来合乎逻辑的是,我程序的 运行 永远不会停止。但是,当我使用 && 运算符时,对我来说似乎不合逻辑,但它工作得很好。你能解释一下为什么我不能使用 || 退出循环吗?运算符?

使用 AND 表示 "if one is zero, exit the loop." 如果使用 OR,表示 "if both are zero, exit the loop"。它与您的想法相反,这就是您可能会感到困惑的原因。当您像这样否定布尔运算符时,AND 变为 OR,反之亦然。您可以从 DeMorgan's Laws.

了解更多相关信息

让我们一步步检查输出(每一步对应一个循环):

第 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

让我们到此为止。当 a 或 b 不等于 0 时,while 循环将继续 运行ning。在所有后续循环中,b 将设置为 3 - 0 并且值永远不会改变 - 它会 运行无限地。如果您的目标是在 1 值达到 0 时停止循环,则需要 && 语句。