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

© noiary 高级黑马   /  2014-9-4 11:53  /  1630 人查看  /  19 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 noiary 于 2014-9-7 20:31 编辑
  1. public class Test {

  2.         public static void main(String[] args) {

  3.                 int x = 1, y = 2,  z = 3;
  4.         
  5.                 System.out.println(y+=z--/++x);
  6.         }
  7. }

  8. //为什么结果是3?  这是怎么运算的啊,  我被搞迷糊了..
复制代码


上面是3天前做java习题(百度<java习题>)遇到的一个问题,没想到这么多热心伙伴帮忙甚至幸运的拿到了技术分/~

此贴终结,感谢各位~


祝各位伙伴过个happy的中秋~!   





评分

参与人数 1技术分 +1 收起 理由
格子、 + 1

查看全部评分

19 个回复

倒序浏览
y+=z--/++x等价于 y += ((z--) / (++x)) 所以是3

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1

查看全部评分

回复 使用道具 举报
fantacyleo 发表于 2014-9-4 11:59
y+=z--/++x等价于 y += ((z--) / (++x)) 所以是3

原来是这样!  十分感谢~!
回复 使用道具 举报
z--是先用z的值然后再减1,++x是先让X+1然后用X+1的值,所以这个方程,等号右边的部分是Z/(X+1),也就是3/2,取整得1,把右面计算结果代入看等号右面Y+=1,也就是Y=Y+1,所以结果很明了了,聪明的楼主一定明白了
回复 使用道具 举报
结果=2+(3/2)
回复 使用道具 举报
运算符的优先级而已。
回复 使用道具 举报
第一步:++x:   x=x+1  x为2;
第二步:z/x  :z=3,x=2   结果为1;
第三步:y+=(z/x):y=y+1,y为3;
第四步:z-- :z为2
回复 使用道具 举报
___瘦不了 发表于 2014-9-4 12:19
z--是先用z的值然后再减1,++x是先让X+1然后用X+1的值,所以这个方程,等号右边的部分是Z/(X+1),也就是3 ...

感谢~  

我刚试了下y+=z--;

结果y = 5;   而不是4

那么这个"--"就成了摆设啦?
回复 使用道具 举报

我能猜到是3/2 而不是2/2  

可是原理怎么解释呢?  只能解释成java在连续运算时优先使用变量值然后把"--"无视了嘛? - -
回复 使用道具 举报
MeryStyle 来自手机 中级黑马 2014-9-7 00:58:09
10#
3# 正解!!
回复 使用道具 举报
noiary 发表于 2014-9-6 23:06
感谢~  

我刚试了下y+=z--;

运算结束后再减减,不能说它没用了,如果有下一步运算它减减还是有用的
回复 使用道具 举报
学习,学习!
回复 使用道具 举报
y=y+(3/2)  因为int是整型 所以3/2=1;     y=2+1;     y=3;
回复 使用道具 举报
noiary 发表于 2014-9-6 23:06
感谢~  

我刚试了下y+=z--;

++,-- 运算符放在数值前,先运算再赋值。运算符放在数值后面,先赋值再运算

比如a = 1;b = 2;
a += b++ // a==3 ,b==3
a += ++b;// a==4, b==3
回复 使用道具 举报
相当于y=(y+(z--/++x)) =2+1.5=3.5!但是你由于是int整型的 所以就是3!
回复 使用道具 举报
家进 发表于 2014-9-7 09:29
++,-- 运算符放在数值前,先运算再赋值。运算符放在数值后面,先赋值再运算

比如a = 1;b = 2;

哦哦  我终于绕过来了!  

再次感谢~
回复 使用道具 举报
noiary 发表于 2014-9-6 23:08
我能猜到是3/2 而不是2/2  

可是原理怎么解释呢?  只能解释成java在连续运算时优先使用变量值然后把"--" ...

X++和++X的区别就是 参与运算的时候 前者后做+1 后者先做+1
比如X=0;A=X++;这时候输出A 应该是0
A=++X;这时候输入A 应该是1
回复 使用道具 举报
noiary 发表于 2014-9-6 23:08
我能猜到是3/2 而不是2/2  

可是原理怎么解释呢?  只能解释成java在连续运算时优先使用变量值然后把"--" ...

也不是无视-- 只不过你那个--是在后面 所以先做运算 再做--
你可以在后面再多输出一个Z 那个Z应该已经变成2了
回复 使用道具 举报

A=++X可以理解成 X=X+1; 然后A=X;
A=X++可以理解成 A=X; 然后X=X+1;
回复 使用道具 举报
学习,学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马