Java 简单的逻辑不起作用,还是我遗漏了什么?

Java 简单的逻辑不起作用,还是我遗漏了什么?,java,logic,logical-operators,Java,Logic,Logical Operators,我不明白为什么打印出以下类: 正确 假的 我认为输出应该是: 假 假的 因为这行打印错误: System.out.println((11 >= 1 || 11 <= 10) & (true == 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 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;
    }
}
公共类TestClass{
公共静态void main(字符串[]args){
System.out.println(1到10(11,false));

System.out.println((11>=1 | | 11=1 | | n要测试值是否在1到10之间吗? 如果是这种情况,则更改(n>=1 | | n=1&&n 因此,这一行还应该打印false:
System.out.println(ininto10(11,false));


不,此行不应打印
false
。尽管第一个参数
11
,确实会将表达式
n>=1 | | n=1 | | 11转换为
true
。如何处理

    if ((n >= 1 || n <= 10) & (outsideMode == false)) {
        return true;
    }
它将返回
false
。如何返回

    if ((n >= 1 || n <= 10) & (outsideMode == false)) {
        return true;
    }
由于
11>=1
true
,因此它不会再次检查
11
如果要在数字介于1和10之间(包括1和10)时返回true,则应为:

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

如果((n>=1&&n我认为您在1到10的函数中遗漏了这一点,那么您正在比较(false==false),并且主要是在比较(true==false)。结果也是如此。希望这会有所帮助。

让我们在1到10中分解测试:

参数:outsideMode=false;n=11

  • (n>=1 | | n(11>=1 | | 11)(真| |假):=>非常正确
  • outsideMode==false:=>false==false:=>so-TRUE
最后:

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

    return false;
}

:=>返回TRUE!

您的期望值和结果是相同的..它打印
TRUE-false
,您期望它打印…
TRUE-false
?问题是什么?我回答了我的问题。我的期望值是false如果您想获得匹配的输出,请将
TRUE
在10
中传递到
()。我知道Java甚至不检查&运算符?它检查。它甚至不检查
|
运算符。这是因为您有另一个选择,所以如果至少有一个参数为true,则为true。n>=1为true,因此返回trueimmidiately@D.Ace我编辑了我的答案,这样更容易理解。如果你仍然不理解某些东西,请尝试我给你们的改变,看看它是如何工作的,然后再问我更多的问题。我会尽快回答,我看到,短路操作会立即返回真,第一个条件是真的。我想它只会使第一个方程短路,它是这样的:(n>=1 | | n哪个应该打印false?慢..问题是,
(n>=1 | | n=1&&n这是我所认为的@Pirate,但它不是打印false。它是打印true。所以你想从函数返回false吗?将| |更改为函数内部的-,它将返回false。好的,但在解释中提到这一行将是false:“所以条件将变成这样,真与假,那将是假”。这仍然正确吗???在解释中是(真与真),但如果你将| |改为&它将变成(假与真)这将是错误的。不,在Java中,布尔真是
true
。而不是
true
。在这种情况下,我们谈论的不是确切的Java语法或关键词,而是布尔逻辑。感谢您的回答。我将对其他答案进行投票。
if ((n is greater or equal to 1 AND smaller or equal 10) AND is the mode set to false)
     return true
if ((n >= 1 && n <= 10) && (outsideMode == false)) {
    return true;
}
public static boolean in1To10(int n, boolean outsideMode) {
    if ((TRUE) & (TRUE)) {
        return true;
    }

    return false;
}