无法使用 || 退出循环操作员
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 时停止循环,则需要 && 语句。
你能解释一下为什么当我在循环中使用短路 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 时停止循环,则需要 && 语句。