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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 289623337 中级黑马   /  2014-9-25 19:58  /  3501 人查看  /  26 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int n=3,m=8
//11=3+8;
//3=11-8;
//8=11-3;
n=n+m;
m=n-m;
n=n-m;

System.out.println("n="+n",m="+m);

最后达到的目是两个整数变量值互换





我是真心的搞不懂是
n=n+m;
m=n-m;
n=n-m;
这三个等式的由来,是什么规律???

评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 神马都是浮云

查看全部评分

26 个回复

倒序浏览
这只是 置换 而已  记着就行  数学思维  不过 一般置换 追容易想到的 还是第三方变量  
回复 使用道具 举报
18643448863 发表于 2014-9-25 20:09
这只是 置换 而已  记着就行  数学思维  不过 一般置换 追容易想到的 还是第三方变量   ...

其实我就是搞不懂n m 代表的意思,要当做规律来记忆的话还可以,
回复 使用道具 举报
这个挺简单的
n=n+m;                    //n=n+m                                   此时m=m
m=n-m;                    //m=(n+m)-m=n                      此时n=n+m
n=n-m;                     //n=(n+m)-(n)=m
回复 使用道具 举报
本帖最后由 289623337 于 2014-9-26 06:27 编辑
杨佳名 发表于 2014-9-25 21:37
这个挺简单的
n=n+m;                    //n=n+m                                   此时m=m
m=n-m;     ...

好乱好乱有点晕了
第一行m=m没有错,那n=n也是对的?
第二行算完m=n也是对的?
第三行就是了部分代入法吗?
彻底的头疼了,简单的背公式还是可以的!麻烦你了!
回复 使用道具 举报
289623337 发表于 2014-9-25 21:54
好乱好乱有点晕了
第一行m=m没有错,那n=n也是对的?
第二行算完m=n也是对的?

第一行  n变成了n+m       m还是m
第二行是用第一行的数据       m变成了(n+m)-m,即m变成了n;n还是第一行的n+m
第三行是用第二行的数据。    ……()楼主自己推一下
回复 使用道具 举报
Imp_x 高级黑马 2014-9-25 22:03:01
7#
你直接引入一个新变量  看懂了这个  往回去看你就懂了  他就节省了新建变量这一步

a = n + m;
m = a - m = n;
n = a - n = m;

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
不系之舟王 来自手机 中级黑马 2014-9-25 22:05:17
8#
实在搞不懂,可以再添加一个变量,用赋值来实现值的交换
回复 使用道具 举报
int n=3,m=8

n=n+m; //此时 n(3)就是m(8) 与 n(3) 的和 可以理解为 sum = n+m;( sum = 3 + 8 )
m=n-m;//此时  m 就是 m(8) 与 n (3) 的和(也就是sum) 减去 m(8). 结果就是 原来的 n(3),
n=n-m;//此时 n 就是 m(8) 与 n (3) 的和(也就是sum) 减去 重新赋值后的m,也就是原来的n(3),结果就是原来的m .

//完成了 m 和 n的置换,  缺点就是, 如果m 和 n 的值比较大的话, 会超出int的取值范围,导致损失精度.
System.out.println("n="+n",m="+m);





评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 很给力!

查看全部评分

回复 使用道具 举报
加油偶!

回复 使用道具 举报
本帖最后由 289623337 于 2014-9-26 07:04 编辑
ζ_____________ 发表于 2014-9-25 22:25
int n=3,m=8

n=n+m; //此时 n(3)就是m(8) 与 n(3) 的和 可以理解为 sum = n+m;( sum = 3 + 8 )

多谢上面几位马友的耐心解答,终于搞懂了,我感觉还是引用了一个变量,让mn的值互换了,这种思维就在计算机编程中有,还是属于高等数学的思维呢?
在此忍不住的必须夸夸你,你在解释的时候编码都写得这么规范,很详细的注释,编码的编写习惯很好!
回复 使用道具 举报
不系之舟王 发表于 2014-9-25 22:05
实在搞不懂,可以再添加一个变量,用赋值来实现值的交换

嗯,我感觉添加变量和第三方是有区别的,题目中有mn在添加mn是属于添加变量,要是添加别的话,就是第三方变量。是否?
回复 使用道具 举报
杨佳名 发表于 2014-9-25 22:02
第一行  n变成了n+m       m还是m
第二行是用第一行的数据       m变成了(n+m)-m,即m变成了n;n还是第 ...

多谢杨兄的耐心讲解,我有种茅塞顿开的感觉,感觉到获取知识的快乐,现在终于搞懂了!
回复 使用道具 举报

必须的,一起!!!come on,toghter!
回复 使用道具 举报
腾讯面试曾经就有这样的题目哦
回复 使用道具 举报
289623337 发表于 2014-9-26 07:00
多谢杨兄的耐心讲解,我有种茅塞顿开的感觉,感觉到获取知识的快乐,现在终于搞懂了! ...

不客气。都是在路上。
回复 使用道具 举报
289623337 发表于 2014-9-26 06:53
嗯,我感觉添加变量和第三方是有区别的,题目中有mn在添加mn是属于添加变量,要是添加别的话,就是第三方 ...

第三方变量,不是太懂,我只知道我一般做交换两变量值时是这样的,引入一个变量s,s=m:m=n:n=s,感觉这样更容易理解。
回复 使用道具 举报
呃、、、、
n = n+m;//这一部不说了
m = n-m;//这个式子拆分开来是不是:m = (n+m)-m,也就是说m=n,对不?把n的值赋给了m
n = n - m;//l楼主一定是到这蒙圈了,此刻n是不是等于(n+m),m是不是等于n?再将此式拆分:n = (n+原来的m)- n,对不?那么n是不是等于原来的m了?显然是的。此题结束。
回复 使用道具 举报
这个不是位运算, +和-不是位运算符.
& | ~ ^这才是位运算符.
a = a ^ b;
b = a ^ b;
a = a ^ b;
通过这个达到交换a和b两个的值.
回复 使用道具 举报
289623337 来自手机 中级黑马 2014-9-26 20:28:34
20#
caixingke 发表于 2014-9-26 19:36
这个不是位运算, +和-不是位运算符.
& | ~ ^这才是位运算符.
a = a ^ b;

我又查了下笔记,的确是我发错了!!!!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马