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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戎石锁 中级黑马   /  2012-8-18 20:37  /  2241 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戎石锁 于 2012-8-20 21:36 编辑

class Demo
{
        public static void main(String[] args)
        {
                int x=0,y=1;
                if(++x==y--&x++==1||--y==0)
                        System.out.println("x="+x+",y="+y);
                else
                        System.out.println("y="+y+",x="+x);
        }
}

程序运行后的结果是 x=2 ,y=0 但是没看明白是怎么来的
(++x==y--&x++==1||--y==0)
主要理不清这句话怎么比较判断

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
int x=0,y=1;
(++x==y--&x++==1||--y==0)   所以结果为   true  
  1==1&1==1||-1==0
       true || false   
这个应该能看懂吧

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
运算符的优先级别问题。搞清楚就好了。此处优先级先是++和--,然后==,然后&,然后||。可以加上括号,其实就是
(++x)==(y--) & (x++)==1  || (--y)==0
0      ==   0   &    1  ==1   || (--y)==0
                      真 & 真       || (--y)==0
前面为真,后面的不执行。因为||。并且表达式成立。
++x是前面++,所以执行完之后x自加1,x=2
而前面y--了,所以y=0.
不知道我说的你明白没。。。这种开发不实用的东西确实比较晕。

点评

部分地方不正确,但是短路说出来了,给一分。  发表于 2012-8-19 08:13

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
++/--   ==    &    ||(运算符从左到右优先级为从高到低)
如果实在搞不清的话就建议你加上括号然。比如((++x==y--)&(x++==1||--y==0))
当然如果是面试,那你就把运算符的优先级记一下。
回复 使用道具 举报
++x==y--&x++==1||--y==0
++x==y--&相当于1==1,这时x先参与++运算,而后参与==运算;y参与==运算的时候还是1,运算完成执行--运算,变为0
x++==1相当于1==1,x先执行==运算,==运算完成再执行++运算变为2
前两步为true&true
后面||是短路或,不操作
所以答案为x=2,y=0

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
悲剧都没人给分
回复 使用道具 举报
首先,
x=0,y=1;可以把if中的表达式拆开来,
分解为 ++x==y--                    &    x++==1     ||    --y==0   
      1,此表达式为true,操作完的x=1,y=0          2,此表达式为true,操作完的x=2              3,因为1和2都为真,所以可以把整个表达式可以看为true||--y==0;此时已经很明显了,因为是||,所以短路,后面的--y==0不会执行,可判断此表达式的最终结果为true
所以,最后的x的值为2,y的值为0;

// true x=1,y=0     true  x=2   

点评

额,不是山寨,点错了,嘿嘿  发表于 2012-8-19 08:14

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 山寨

查看全部评分

回复 使用道具 举报
阳杰 初级黑马 2012-8-18 22:24:27
8#
张扬123 发表于 2012-8-18 20:53
运算符的优先级别问题。搞清楚就好了。此处优先级先是++和--,然后==,然后&,然后||。可以加上括号,其实 ...

感觉你这个回答不对吧,支持一楼。
回复 使用道具 举报
阳杰 发表于 2012-8-18 22:24
感觉你这个回答不对吧,支持一楼。

额。。。那你看看其他楼跟我说的大概意思吧老兄。。。||是短路或,前面为真后面的都不运算的,1楼的都算出||后面的是-1==0是false了?-1都是错的好吧。。。你好好看看。
回复 使用道具 举报
黑马王建伟 发表于 2012-8-18 21:39
首先,
x=0,y=1;可以把if中的表达式拆开来,
分解为 ++x==y--                    &    x++==1     ||    - ...

呵呵,没事,谢谢鼓励
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马