【问题标题】:Boolean logical operators for flow controls in javajava中流控制的布尔逻辑运算符
【发布时间】:2020-02-01 14:18:19
【问题描述】:

我们不能在java流控制(for循环,while循环等)中使用布尔逻辑运算符(例如&,|,!,^等)吗???

我想打印1到100之间的所有偶数。所以我用了下面两个源代码。

import java.util.*;
class Example{
    public static void main(String args[]){
        int i=1;
        while(i<100){
            if(i%2==0)
                System.out.print(i+" ");
                i++;
            }
    }
}

此代码已编译并打印 1 到 100 之间的所有偶数。

import java.util.*;
class Example{
    public static void main(String args[]){
        int i=1;
        while(i<100 & i%2==0){
                System.out.print(i+" ");
                i++;
            }
    }
}

此代码编译没有任何错误。但没有给出任何打印。

这是为什么呢? 我们不能在 while 循环中使用布尔逻辑运算符吗?

【问题讨论】:

  • 第二个代码显示“i 为 100 i 为奇数时立即停止”。 i 最初是奇数,所以它立即停止,甚至没有循环一次。
  • & , && 运算符仅在两个表达式都为 true 时才返回 true ,在您的情况下,我初始化为 1 所以 i
  • 那么我不能通过使用“&”先生获得相同的输出吗??

标签: java boolean-logic flow-control


【解决方案1】:

记住while循环条件是继续循环的条件,也就是说当条件为假时,循环停止。

如果你否定第二个代码中的条件:

!(i<100 & i%2==0)

使用De Morgan's Law,相当于:

i>=100 | i%2!=0

或者说:

i 大于或等于 100 或 i 为奇数。

这是while循环的停止条件。嗯,i 最初是 1,这是奇数,所以循环停止,甚至没有执行一次迭代。

换句话说,您不能将第一个代码重写为第二个代码。它们不是等价的。 if 条件中的内容进入 if 条件中。您不能将其“合并”到 while 条件中,因为它们用于不同的目的。

我还推荐&amp;&amp; 用于逻辑与,因为它只在必要时评估正确的操作数。欲了解更多信息,请参阅What is the difference between & and && in Java?

【讨论】:

    【解决方案2】:

    错误在这一行:

    while(i<100 & i%2==0){
    

    &amp; 应替换为&amp;&amp;:

    while(i<100 && i%2==0){
    

    【讨论】:

    • 当它这样做时,同样的事情会发生。它已编译,但不显示任何输出。
    【解决方案3】:

    你已经撕毁了逻辑运算符... and 这是一个逻辑运算符 只有当 2 个运算符为真时才为真(x>5 和 y5 为真且 yor 运算符,则只有当其中一个为真或两者都为真时,条件才会为真........ 所以让我们解释一下你的代码。 您有条件(i

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2015-02-06
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多