为了账号安全,请及时绑定邮箱和手机立即绑定

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

 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 回答

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

0 回复 有任何疑惑可以回复我~
#1

叫我冒哥 提问者

原来如此,谢谢了
2016-09-05 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//57e7a17f0001765c07800385.jpg

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

0 回复 有任何疑惑可以回复我~

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

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

0 回复 有任何疑惑可以回复我~

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

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

( ̄▽ ̄)"

0 回复 有任何疑惑可以回复我~
#1

叫我冒哥 提问者

谢谢了大神
2016-09-28 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

叫我冒哥 提问者

但是我把a<c改为a>c,第一个能运行,第二个还是不行 这是为什么?
2016-09-04 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

叫我冒哥 提问者

这样确实可以。。 但我想问的是为什么前一个不用括号也能运行呢?
2016-09-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信