-5

我需要解释以下代码执行

public static void main(String[] args) {
    Long tail = 2000L;
    Long distance = 1999L;
    Long story = 1000L;
    if ((tail > distance) ^ ((story * 2) == tail))
        System.out.println("a");
    if ((distance + 1 != tail) ^ ((story * 2) == distance))
        System.out.println("2");

}

代码执行后没有输出。

4

7 回答 7

5

^代表 2 个布尔值的XOR运算,在下面的语句中

if ((tail > distance) ^ ((story * 2) == tail))

(tail > distance)真的

((story * 2) == tail) 是真的

并且true XOR truefalse

于 2013-09-18T13:12:58.107 回答
3

XOR 输出表如下所示:
XY 输出
0 0 0
1 0 1
0 1 1
1 1 0

因此,基于您的两个布尔值都为真,您将从 if 语句中获得错误的返回。

于 2013-09-18T13:22:11.407 回答
1
public static void main(String[] args) {
    Long tail = 2000L;
    Long distance = 1999L;
    Long story = 1000L;
    if ((tail > distance) ^ ((story * 2) == tail))
        System.out.println("a");
    if ((distance + 1 != tail) ^ ((story * 2) == distance))
        System.out.println("2");
}

if (((tail > distance) ^ ((story * 2) == tail)) == true)
            System.out.println("a");

等于:

if (((2000 > 1999) ^ ((1000 * 2) == 2000)) == true)
            System.out.println("a");

等于:

if ((true ^ true) == true)
            System.out.println("a");

等于:

if (false == true)
            System.out.println("a");

因此它从未被打印出来。

类似的推理适用于第二个if-else陈述。

于 2013-09-18T13:22:00.530 回答
0

你的两个条件false就是你没有输出的原因

于 2013-09-18T13:13:31.187 回答
0

您永远不会返回任何东西,因为没有任何东西可以返回 - 这两个条件都是错误的。

我也很确定它应该写成

if ((tail > distance) ^ ((story * 2) == tail)) {
    System.out.println("a");
}
if ((distance + 1 != tail) ^ ((story * 2) == distance)) {
    System.out.println("2");
}

你也可以通过说来测试它

if ((tail > distance) ^ ((story * 2) == tail)) {
    System.out.println("a");
} else {
    System.out.println("Condition 1 False");
}
if ((distance + 1 != tail) ^ ((story * 2) == distance)) {
    System.out.println("2");
} else {
    System.out.println("condition 2 False");
}

或者,你的意思是写

if ((tail > distance) || ((story * 2) == tail)) {
    System.out.println("a");
}
if ((distance + 1 != tail) || ((story * 2) == distance)) {
    System.out.println("2");
}

使用逻辑 OR 代替?

于 2013-09-18T13:14:59.240 回答
0

您可能缺少对“或”和“异或”之间区别的基本理解。只有当(a 为真且 b 为假)或(a 为假且 b 为真)时,异或条件 a ^ b 才为真。

于 2013-09-18T13:17:30.373 回答
0

^ 是异或。这与 OR 几乎相反。

或者:

True True = True
True False = False
False True = False
False False = False

异或:

True True = False
True False = True
False True = True 
False False = False
于 2013-09-18T13:20:39.583 回答