Java中如何证明条件运算符(?:)的结合性是从右向左?

大神求解:如何证明条件运算符(?:)的结合性是从右向左?请举例说明。

2个回答

class Untitled {
    public static void main(String[] args) {
        Boolean b1 = false;
        Boolean b2 = false;
        Boolean b3 = false;
        Boolean b4 = false;
        Boolean b5 = false;
        for (int i = 0; i <= 31; i++) {
            b1 = i % 2 == 1;
            b2 = (i / 2) % 2 == 1;
            b3 = (i / 4) % 2 == 1;
            b4 = (i / 8) % 2 == 1;
            b5 = (i / 16) % 2 == 1;
            Boolean x = (b1 ? b2 : b3) ? b4 : b5;
            Boolean y = b1 ? b2 : (b3 ? b4 : b5);
            Boolean z = b1 ? b2 : b3 ? b4 : b5;
            if (x != y || y != z || x != z) {
                System.out.println("x = (" + b1 + " ? " + b2 + " : " + b3 + ") ? " + b4 + " : " + b5);
                System.out.println("y = " + b1 + " ? " + b2 + " : (" + b3 + " ? " + b4 + " : " + b5 + ")");
                System.out.println("z = " + b1 + " ? " + b2 + " : " + b3 + " ? " + b4 + " : " + b5 + "");
                System.out.println("x = " + x + ", y = " + y + ", z = " + z);
                System.out.println("");
            }
        }
    }
}

x = (true ? true : false) ? false : false
y = true ? true : (false ? false : false)
z = true ? true : false ? false : false
x = false, y = true, z = true

x = (true ? true : true) ? false : false
y = true ? true : (true ? false : false)
z = true ? true : true ? false : false
x = false, y = true, z = true

x = (true ? false : false) ? false : true
y = true ? false : (false ? false : true)
z = true ? false : false ? false : true
x = true, y = false, z = false

x = (true ? true : false) ? false : true
y = true ? true : (false ? false : true)
z = true ? true : false ? false : true
x = false, y = true, z = true
x = (true ? false : true) ? false : true
y = true ? false : (true ? false : true)
z = true ? false : true ? false : true
x = true, y = false, z = false

x = (true ? true : true) ? false : true
y = true ? true : (true ? false : true)
z = true ? true : true ? false : true
x = false, y = true, z = true

x = (true ? false : false) ? true : true
y = true ? false : (false ? true : true)
z = true ? false : false ? true : true
x = true, y = false, z = false

x = (true ? false : true) ? true : true
y = true ? false : (true ? true : true)
z = true ? false : true ? true : true
x = true, y = false, z = false

y始终等于z,说明
b1 ? b2 : (b3 ? b4 : b5);
b1 ? b2 : b3 ? b4 : b5;
等价
(b1 ? b2 : b3) ? b4 : b5;
b1 ? b2 : b3 ? b4 : b5;
不等价

所以得证

如果问题得到解决,请点下我回答右边的采纳,谢谢

IndividualisticLoner
西海桃子 感谢您的回答,谢谢您
接近 2 年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复IndividualisticLoner: 结合性,比如a = b = c = 1,这个表达式,就是右结合,首先c = 1,然后b = (c = 1),然后a = (b = (c = 1)),算术表达式,同优先级,就是左结合,比如a + b + c,就是(a + b) + c
接近 2 年之前 回复
IndividualisticLoner
西海桃子 您是怎么理解结合性这个概念,又怎么理解运算顺序
接近 2 年之前 回复
qq_23126581
渊渟无迹静涛君 多详细,采纳了
接近 2 年之前 回复
 public class Test {
    public static void main(String[] args) {
        boolean x = test1() ? test2() : test3() ? test4() : test5();
        System.out.println(x);
    }

    public static boolean test1() {
        System.out.println("test1");
        return true;
    }
    public static boolean test2() {
        System.out.println("test2");
        return true;
    }
    public static boolean test3() {
        System.out.println("test3");
        return false;
    }
    public static boolean test4() {
        System.out.println("test4");
        return false;
    }
    public static boolean test5() {
        System.out.println("test5");
        return false;
    }
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐