黑马程序员技术交流社区

标题: 求回答(谢谢,已解决) [打印本页]

作者: 戎石锁    时间: 2012-8-18 20:37
标题: 求回答(谢谢,已解决)
本帖最后由 戎石锁 于 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)
主要理不清这句话怎么比较判断

作者: 方志亮    时间: 2012-8-18 20:45
int x=0,y=1;
(++x==y--&x++==1||--y==0)   所以结果为   true  
  1==1&1==1||-1==0
       true || false   
这个应该能看懂吧
作者: 张扬123    时间: 2012-8-18 20:53
运算符的优先级别问题。搞清楚就好了。此处优先级先是++和--,然后==,然后&,然后||。可以加上括号,其实就是
(++x)==(y--) & (x++)==1  || (--y)==0
0      ==   0   &    1  ==1   || (--y)==0
                      真 & 真       || (--y)==0
前面为真,后面的不执行。因为||。并且表达式成立。
++x是前面++,所以执行完之后x自加1,x=2
而前面y--了,所以y=0.
不知道我说的你明白没。。。这种开发不实用的东西确实比较晕。
作者: 童兴龙    时间: 2012-8-18 21:00
++/--   ==    &    ||(运算符从左到右优先级为从高到低)
如果实在搞不清的话就建议你加上括号然。比如((++x==y--)&(x++==1||--y==0))
当然如果是面试,那你就把运算符的优先级记一下。
作者: 张忠豹    时间: 2012-8-18 21:00
++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
作者: 王海亮    时间: 2012-8-18 21:13
悲剧都没人给分
作者: 黑马王建伟    时间: 2012-8-18 21:39
首先,
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-18 22:24
张扬123 发表于 2012-8-18 20:53
运算符的优先级别问题。搞清楚就好了。此处优先级先是++和--,然后==,然后&,然后||。可以加上括号,其实 ...

感觉你这个回答不对吧,支持一楼。
作者: 张扬123    时间: 2012-8-19 00:25
阳杰 发表于 2012-8-18 22:24
感觉你这个回答不对吧,支持一楼。

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

呵呵,没事,谢谢鼓励




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2