java - 无法使用 || 退出循环运算符(operator)

标签 java operators short-circuiting

您能解释一下为什么当我在循环中使用短路或时我的代码“挂起”吗?

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

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

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

最佳答案

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

第 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 循环将继续运行。在所有后续循环中,b 将被设置为 3 - 0 并且这些值永远不会改变 - 它将无限运行。如果您的目标是在 1 值达到 0 时停止循环,则需要 && 语句。

关于java - 无法使用 || 退出循环运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863471/

相关文章:

java - 有条件地在 jooq 准备好的语句中包含子句

java - 在 freemarker 模板中从 javascript 调用 Java 类的方法

java - HttpServletResponse.sendError 之后过滤器中需要返回

c++ - enable_if 中的短路运算符

php - 在 PHP 中打破多个函数(短路)

java开发和重新部署

c++ - 运算符->有什么特别之处以及它是如何工作的?

Java 的 >> 与 >>> 运算符?

math - 是否存在允许您定义新运算符的强类型编程语言?

ios - 短路评估中评估条件的顺序是什么