A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 西门吹风 中级黑马   /  2014-5-26 14:37  /  7905 人查看  /  29 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int x=8,y;
  2. y=(x>5)?100:200;
复制代码
这样写可以正常运行
  1. int x=8,y;
  2. (x>5)?y=100:y=200;
复制代码
不知道为什么这样写编译时就报错
x>5 为真,不是应该去执行y=100吗?


评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

29 个回复

倒序浏览
本帖最后由 波涛 于 2014-5-26 14:47 编辑

首先三目运算符 (表达式1)?(表达式2) : (表达式3),计算方法是这样的:表达式1是一个逻辑表达式,如果其值为true,则整个表达式的值为表达式2的值,否则为表达式3的值,最终返回的就是个值,不是表达式y=100什么的。终归运算符诸如加减乘除,其最终计算出来的就是一个值。不能当流程控制语句。
回复 使用道具 举报 1 0
楼主, 就像你上面写的 y=(x>5)?100:200;  首先是判断x>5?为真就执行100,获取的个返回值给y,为假就获取返回值200给y. 三元运算符是必须要有返回值的赋值给XX对象的。你后面那样写返回去的只是一个表达式而已。
回复 使用道具 举报 1 0
本帖最后由 西门吹风 于 2014-5-26 15:43 编辑

看了楼上两位的解释,好像有点明白了,是不是可以这样理解,(表达式1)?(表达式2) : (表达式3)中的(表达式2)和(表达式3)必须是有结果的表达式,并根据(表达式1)的真假返回对应的值?
回复 使用道具 举报
(x>5)?y=100:y=200;
放在了Eclispe中试验了一下,看到了提示的错误


可以看到第一个错误是提示左边必须有一个变量,



我们加上这个变量之后可以看到提示的是Syntax error on token "=", != expected 语法错误
说明三元应该是一个整体吧,左边必须有接收值的变量,同时还要有返回值,而赋值没有返回值!

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报 2 0
三元运算符在运算过程是有优先级的,你代码中 “y="是最后运算后的赋值过程
  1. //这个是给的可以编译的
  2. int x = 8,y;
  3. y = (x>5)?100:200

  4. //这个加了两个变量m.n
  5. int x = 8,y,m,n;
  6. y = (x>5)?m=100:n=200

  7. /*
  8. 程序会出现编译错误
  9. 原因是返回值是y = (m=100),而y是int型
  10. */
复制代码


就是说三元运算符一定要返回一个确定的值,且这个值是要和表倒式2-3同类型的值
回复 使用道具 举报
很简单帮你说明这个道理 与运算顺序什么的无关
//首先来说下第一个
int x=8,y;
y=(x>5)?100:200;
这里肯定先运行的代码是  y=(x>5)吗,毫无疑问,
这点代码y参与运算,而你确没有初始化变量y的值,肯定会报错。
这时候只需要在初始化y=0就好

int x=8,y;
(x>5)?y=100:y=200;
第二份代码  (x>5),先进行比较运算,然后给y赋值。

要点:变量初始化的时候需要赋值才能参与运算。

版主  不要吝啬你的分啊   就差技术分了
回复 使用道具 举报 0 1
wyy666 中级黑马 2014-5-26 21:38:52
8#
不符合三元格式啊
回复 使用道具 举报
后面两个表达式要求返回值,赋值语句不能返回值的!
回复 使用道具 举报
27ZJQ 来自手机 中级黑马 2014-5-30 17:10:44
10#
第一种表达式是固定的吧?
回复 使用道具 举报
一起分析分析
回复 使用道具 举报
y如果是在类的成员位置上时可以不用赋值;若是在方法中,则必须赋值。
回复 使用道具 举报
本帖最后由 qincai 于 2014-6-13 23:50 编辑

只要是运算符都会有一个结果,三元运算符是一个整体
回复 使用道具 举报
你没看毕老师的视频吧,毕老师说,三元运算和if的区别,三无运算是一种赋值运算,一定要有返回值的,前面当然要有=啦,而if就不用啦,不信你试试
回复 使用道具 举报
向前看向前走 发表于 2014-5-26 15:45
(x>5)?y=100:y=200;
放在了Eclispe中试验了一下,看到了提示的错误

不错,很给力啊
回复 使用道具 举报
Chills719 来自手机 中级黑马 2014-10-15 19:19:22
16#
不错,支持一个!!!!
回复 使用道具 举报
向前看向前走 发表于 2014-5-26 15:45
(x>5)?y=100:y=200;
放在了Eclispe中试验了一下,看到了提示的错误

解释的很到位
回复 使用道具 举报
确实,第一个y没有初始化,当然报错
回复 使用道具 举报
这也行。。。还真能整啊
回复 使用道具 举报
波涛 发表于 2014-5-26 14:45
首先三目运算符 (表达式1)?(表达式2) : (表达式3),计算方法是这样的:表达式1是一个逻辑表达式,如果其值 ...

讲解的很到位
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马