简单的逻辑不工作或我错过了什么?

时间:2016-10-10 09:11:05

标签: java logic logical-operators

我不明白为什么以下课程打印出来:
真正

我认为输出应该是:

因为此行打印为false:

System.out.println((11 >= 1 || 11 <= 10) & (true == false));

所以这一行也应该打印false:

System.out.println(in1To10(11, false));

我在这里缺少什么?这是班级。

public class TestClass {

    public static void main(String[] args) {
        System.out.println(in1To10(11, false));

        System.out.println((11 >= 1 || 11 <= 10) & (true == false));

    }

    public static boolean in1To10(int n, boolean outsideMode) {
        if ((n >= 1 || n <= 10) & (outsideMode == false)) {
            return true;
        }

        return false;
    }
}

6 个答案:

答案 0 :(得分:2)

您想测试值是否在1到10的范围内? 如果是这种情况,将(n> = 1 || n&lt; = 10)改为(n> = 1&amp;&amp; n&lt; = 10)

答案 1 :(得分:2)

    (                  true                    )
    (      true       ) & (        true        )
    (true   || false  ) & (        true        )    <--- false == false is true!
if ((n >= 1 || n <= 10) & (outsideMode == false)) {
    return true;
}

看,是n >= 1?是的,所以truetrue v p <-> true,所以Java甚至不进一步检查。 true /\ true <-> true我们输入ifreturn true;

您的代码是用简单的英语:

if ((n is greater or equal to 1 OR smaller or equal 10) AND is the mode set to false)
     return true

如果你希望它返回true,如果数字介于1和10之间,则为:

if ((n is greater or equal to 1 AND smaller or equal 10) AND is the mode set to false)
     return true

在Java中是:

if ((n >= 1 && n <= 10) && (outsideMode == false)) {
    return true;
}

另外请记住使用&&||,因为它们是逻辑运算符,而不是处理布尔值时的|&位逻辑运算符。

答案 2 :(得分:1)

  

所以此行也应该打印false:System.out.println(in1To10(11, false));

不,此行不应打印false。虽然第一个参数11确实将表达式n >= 1 || n <= 10从您的方法转换为11 >= 1 || 11 <= 10(与您的其他表达式匹配),但第二个参数false转为{{1}进入outsideMode == false,而你的另一个表达式有false == false

这就是两个输出不同的原因:true == false的输出为in1To10,因为比较true产生false == false,而true的输出是错误的,因为main会产生true == false

注意:您的表达式与其确定false介于n1之间的既定目标不符。您需要将10替换为||才能完成此操作。

答案 3 :(得分:1)

我认为你错过了函数in1to10,你正在比较(false == false),而你在比较(true == false)。结果也是如此。希望这会有所帮助。

答案 4 :(得分:-1)

这将返回true。怎么样?

    if ((n >= 1 || n <= 10) & (outsideMode == false)) {
        return true;
    }

您正在将11false传递给该函数。

当它进入第一个条件时,它将检查n >= 111 >= 1true,因此它不会检查n<=10。同样,它会检查第二个条件,outsideModefalse

就是这样,(true) & (true)

因此整个条件为true,函数将为return true

再次第二个条件,

 (11 >= 1 || 11 <= 10) & (true == false)

它将返回false。怎么样?

由于11 >= 1true,因此不再检查11 <= 10,而右侧为false。 所以条件会变成这样, true & false的{​​{1}}。

答案 5 :(得分:-1)

让我们在in1to10中分解测试:

参数:outsideMode = false; n = 11;

  • (n> = 1 || n&lt; = 10):=&gt; (11> = 1 || 11&lt; = 10):=&gt; (true || false):=&gt;所以是的。
  • outsideMode == false:=&gt; false == false:=&gt;所以是的。

最后:

public static boolean in1To10(int n, boolean outsideMode) {
    if ((TRUE) & (TRUE)) {
        return true;
    }

    return false;
}

:=&GT;返回TRUE!