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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doyxy 中级黑马   /  2014-4-27 11:45  /  1100 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);
复制代码



7 个回复

倒序浏览
本帖最后由 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);






回复 使用道具 举报
实际我有一个很好的方法容易记住++x和x++的规律:
回复 使用道具 举报
实际我有一个很好的方法容易记住++x和x++的规律:
当++在左边的时候,从左往右看先遇到的是++,也就是说先变的值是整个表达式的值,后边的是x的值。,
当++在右边的时候,从左往右看先遇到的是X,也就是说先变的值是x的值,后变的值是整个表达式的值。
回复 使用道具 举报
算术优先级的问题,你好好看下就好了。
回复 使用道具 举报
额,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
试一下!我说的对不对!欢迎交流!也让我复习了一个知识点!
回复 使用道具 举报
输出的结果为:
第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:14
输出的结果为:
第1个是对的
第2个是对的

修正一下:
//以上执行完毕后这里x的值变成了x=1,先比较后执行x++,条件成立执行if中语句
//以上执行--y完毕后这里y的值变为0先执行--y后变为-1所以不成立,if中语句不执行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马