西海桃子 2018-10-28 15:22 采纳率: 60%
浏览 996
已采纳

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

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

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-10-28 15:55
    关注
    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;
    不等价

    所以得证

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#c语言#的问题:构成555单稳态触发器,采用LED指示灯延时时间,对延时时间进行测量并显示(如楼道声控延时灯)需要Proteus仿真图和C语言代码
  • ¥50 神舟笔记本,没有linux的驱动,装的Ubuntu系统,想把风扇速度调到最大
  • ¥15 workstation加载centos进入emergency模式,查看日志报警如图,怎样解决呢?
  • ¥50 如何用单纯形法寻优不能精准找不到给定的参数,并联机构误差识别,给定误差有7个?matlab
  • ¥15 workstation加载centos进入emergency模式,查看日志报警如图,没有XFS,怎样解决呢?
  • ¥15 应用商店如何检测在架应用内容是否违规?
  • ¥15 Ubuntu系统配置PX4
  • ¥50 nw.js调用activex
  • ¥15 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问