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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© igi9009 中级黑马   /  2014-4-23 16:31  /  1136 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*

  2. 需求:将x和y的值互相倒换,不通过第三方变量.

  3. 思路:一个数^一个数2次那么还是原数

  4. 步骤:

  5. 1、x=x ^y 将x的值^上y用x记录该值

  6. 2、y=x^y 因为x的值为x^y即等式为y=x^y^y,一个数^一个数2次那么该值为x

  7. 3、x=x^y 因为y的值为x^y,x的值为x^y,即等式可以写成x=x^y^x^y

  8. 疑惑点:?为什么x最后会等于2

  9. */

  10. class Demo{

  11. public statci void main(String args[])

  12. {

  13. int x =4;int y=2;

  14. x=x^y;

  15. y=x^y;

  16. x=x^y;

  17. System.out.println("y="+y+","+"x="+x);

  18. }

  19. }


复制代码
疑惑点:?为什么x最后会等于2即y的值. 即步骤三里面的赋值表达式x=x^y;为什么等于2即 y????

7 个回复

倒序浏览
这是过程,第3部代错了

QQ截图20140423165539.png (3.03 KB, 下载次数: 25)

QQ截图20140423165539.png
回复 使用道具 举报
给你提供另外一种思路,可能好理解点.
public static void main(String[] args) {
                int x =4;int y=2;
                x =y+ (y=x) -x;  //一句代码搞定  + - 是从前往后依次执行的,
                System.out.println("x="+x);
                System.out.println("y="+ y);

        }
回复 使用道具 举报
本帖最后由 孙旌棋 于 2014-4-23 16:59 编辑

同学, 跟你讲个结论吧, 你先记住总是好的, 一个数 ^ 同一个数两次, 结果是不会变的

例如: 7 ^ 4 ^ 4 = 7  

那么这里
              x = x ^ y;  // x = 4 ^ 2
              y = x ^ y;  // y = (4 ^2 ) ^2 = 4
              x = x ^ y;  // x = (4 ^ 2) ^ 4 = 2

你问的这个问题, 代码我已经给你注释过了

给你提个小建议, 你的代码格式实在是不敢恭维, 平时写代码的时候要注意一下哦

  1. class Demo {

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

  3.         {

  4.                 int x = 4;
  5.                 int y = 2;

  6.                 x = x ^ y; // x = 4 ^ 2

  7.                 y = x ^ y; // y = (4 ^2 ) ^2 = 4

  8.                 x = x ^ y; // x = (4 ^ 2) ^ 4 = 2

  9.                 System.out.println("y=" + y + "," + "x=" + x);

  10.         }

  11. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  • “3、x=x^y 因为y的值为x^y,x的值为x^y,即等式可以写成x=x^y^x^y”这里的等式有问题,应该是x=(x^y)^(x^y^y)注意这里的(x^y^y)中的x^y是原来的,并没有该改变的值。

TestDemo.PNG (113.9 KB, 下载次数: 32)

TestDemo.PNG
回复 使用道具 举报
taulinxinny 来自手机 初级黑马 2014-4-23 23:30:29
地板
第三步x=x^y 相当于(x^y)^x,可以把右边的x放到左边,就等于x^(x^y),根据你写的“思路”得出x=y。而你的想法之所以不对,因为你的第二步中y已经
回复 使用道具 举报
本帖最后由 心?=忐§忑] 于 2014-4-23 23:33 编辑

看一下运算过程:

无标题.png (33.47 KB, 下载次数: 24)

无标题.png
回复 使用道具 举报
taulinxinny 来自手机 初级黑马 2014-4-23 23:36:54
8#
第三步x=x^y 相当于(x^y)^x,可以把右边的x放到左边,就等于x^(x^y),根据你写的“思路”得出x=y。而你的想法之所以不对,因为你的第二步中y已经被赋值成x,为啥第三步中的y还是x^y呢?即使要这么写,但你的x在第一步已经被赋值为x^y了,所以y=(x^y)^y=x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马