关于条件运算符的疑惑,求大神解答

来源:3-7 Java中的条件运算符

叫我冒哥

2016-09-04 20:54

 int a=8,b=3,c=5;
 double x = (a<c) ? b=c : a ;
 System.out.println("输出的结果为:"+x);

上式在Eclipse中可以运行

但我把条件运算符稍微改一下

把表达式1与2换个位置 double x = (a<c) ? a : b=c ;

再运行就报错了

请问大神这是什么情况?

写回答 关注

6回答

  • zzd_zzd
    2016-09-05 14:50:20
    已采纳

    第一个不打括号也是可以运行的,相当于c给b赋值之后再给x赋值,但是第二个如果不打括号是c要给前面的表达式赋值,这样编译是会显示错误的。

    叫我冒哥

    原来如此,谢谢了

    2016-09-05 15:19:04

    共 1 条回复 >

  • 慕标4570059
    2016-09-25 18:07:36

    http://img.mukewang.com/57e7a17f0001765c07800385.jpg

    我也刚学 你看看说的是这个意思不

  • 我改名字了
    2016-09-22 18:34:25

    http://img.mukewang.com/57e3b2ca0001b2cd01200030.jpg还有,如图中所示:提问者三个字在圆括号中,那么不加圆括号能不能知道你是提问者?

    答:有圆括号更容易知道(明白)。所以圆括号明知道加与不加均可,还是为了更简单读懂加上吧。

  • 我改名字了
    2016-09-22 18:28:51

    同学,你都逐一回复了,也给我回复吧!!!

    int a=1,b=2,c=3,d=4;

    a=b=c=d;

    System.out.println(a);

    提示b和c没使用过。

    证明:double x = (a<c) ? a : b=c ;       中      

               (a<c) ? a : b也同样没有被使用。

    ( ̄▽ ̄)"

    叫我冒哥

    谢谢了大神

    2016-09-28 13:19:29

    共 1 条回复 >

  • 慕姐4898255
    2016-09-04 22:07:22

    其实也很简单,第一个不用括号能行,那是因为(a<c)为false,然后它自动判断为:后面的a了;然而,第二次的为:后面的b=c,它就会混乱,它就不会把(b=c)看做整体,即:是b,但是又有=号又有c,误判地脱离了三目运算符了

    叫我冒哥

    但是我把a<c改为a>c,第一个能运行,第二个还是不行 这是为什么?

    2016-09-04 22:19:19

    共 1 条回复 >

  • zzd_zzd
    2016-09-04 21:36:52

     double x = (a<c) ? a : b=c ;把b=c打个括号,即:double x = (a<c) ?  a:(b=c ) ;

    叫我冒哥

    这样确实可以。。 但我想问的是为什么前一个不用括号也能运行呢?

    2016-09-04 21:46:40

    共 1 条回复 >

Java入门第一季(IDEA工具)升级版

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

1165172 学习 · 17581 问题

查看课程

相似问题