黑马程序员技术交流社区

标题: 运算符判断的问题 [打印本页]

作者: doyxy    时间: 2014-4-27 11:45
标题: 运算符判断的问题
本帖最后由 doyxy 于 2014-4-28 08:30 编辑

复习看到一题 ,我的理解和实际运行不一致,是哪里错了呢?
  1.                 int x = 0, y = 1;
  2.                 if (++x == y-- & x++ == 1 || --y == 0)
  3.                 //   1  == 0   &  2  == 1 ||   -1==0  我的理解
  4.                 // false&false||false
  5.                         System.out.println("x=" + x + ",y=" + y);// x=2,y=0
  6.                 else
  7.                         System.out.println("y=" + y + ",x=" + x);
复制代码




作者: doyxy    时间: 2014-4-27 12:17
本帖最后由 doyxy 于 2014-4-27 12:29 编辑

重新思考了一下,大家看是这样的吗?发现还是有问题,y为什么是0呢?
|| 双或 前面为true后面不运行.... 终于ok了 这些运算符真是麻烦

//++x是先加了再运算,x++是先运算再++,那么
// ++x == y-- 即 1==1 (x=1,y=0,但是y先比较了再--)
// x++ == 1    即 1==1 (x=2,y=0)

// --y == 0      即 -1==0 (x=2,y=-1)
// true&true || false 结果为true

                int x = 0, y = 1;

                if (++x == y-- & x++ == 1 || --y == 0)
                        System.out.println("x=" + x + ",y=" + y);// x=2,y=0
                else
                        System.out.println("y=" + y + ",x=" + x);







作者: eternallove    时间: 2014-4-27 14:59
实际我有一个很好的方法容易记住++x和x++的规律:

作者: eternallove    时间: 2014-4-27 15:08
实际我有一个很好的方法容易记住++x和x++的规律:
当++在左边的时候,从左往右看先遇到的是++,也就是说先变的值是整个表达式的值,后边的是x的值。,
当++在右边的时候,从左往右看先遇到的是X,也就是说先变的值是x的值,后变的值是整个表达式的值。
作者: 你为谁归来    时间: 2014-4-27 15:59
算术优先级的问题,你好好看下就好了。
作者: 和静清寂    时间: 2014-4-27 19:55
额,y是等于0的!
原因: if (++x == y-- & x++ == 1 || --y == 0)
初始化时x=0,y=1;
①++x == y--      ++x时=1(此后x=1),    y--时y还等于1(此后y=0)   ++x==y--结果为true
②x++==1          x++结果为1(此后x=2)        x++==1结果为true  
以上是楼主的分析,都是正确的!但是 --y == 0结果为false,--y的动作不与前面的式子参与运算!(就是等于这一步没有,为空!)
所以y=0成立!
楼主可以
if (++x == y-- & x++ == 1 )
                        System.out.println("x=" + x + ",y=" + y);// x=2,y=0
试一下!我说的对不对!欢迎交流!也让我复习了一个知识点!

作者: 小马初长成    时间: 2014-4-28 00:14
输出的结果为:
第1个是对的
第2个是对的
  1. public class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=0,y=1;
  6.                        
  7.                 if(++x==y--)
  8.                 {//这里先执行++x,则x的值为1,再与y比较成立,执行if中语句,然后执行y--
  9.                         System.out.println("第1个是对的");
  10.                 }
  11.                 if(x++==1)
  12.                 {//这里x的值变成了x=1,先比较后执行x++,条件成立执行if中语句
  13.                         System.out.println("第2个是对的");
  14.                 }
  15.                 if(--y==0)
  16.                 {//以上执行y--后这里y的值变为0先执行--后变为-1所以不成立,if中语句不执行
  17.                         System.out.println("第3个是对的");
  18.                 }
  19.         }
  20. }
复制代码

作者: 小马初长成    时间: 2014-4-28 00:17
小马初长成 发表于 2014-4-28 00:14
输出的结果为:
第1个是对的
第2个是对的

修正一下:
//以上执行完毕后这里x的值变成了x=1,先比较后执行x++,条件成立执行if中语句
//以上执行--y完毕后这里y的值变为0先执行--y后变为-1所以不成立,if中语句不执行




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