问答详情
源自:3-7 Java中的条件运算符

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

 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 ;

再运行就报错了

请问大神这是什么情况?

提问者:叫我冒哥 2016-09-04 20:54

个回答

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

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

  • 慕标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也同样没有被使用。

    ( ̄▽ ̄)"

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

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

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

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