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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rchm 黑马帝   /  2012-6-19 00:18  /  2270 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问有什么方法可以实现交换a,b两个变量的值?条件是不借助其他变量.

9 个回复

倒序浏览
这个老毕的视频里有!

第一种:

a = a + b;
b = a - b;
a = a - b;


第二种:

a=a^b;        
b
=b^a;        
a
=b^a;
回复 使用道具 举报
同楼上,毕老师的视频里面提到过,有两种方法
1.通过运算来交换
int a = 3;
int b = 8;
a = b-a;//a的值变为5,而b的值仍然为8
b = b-a;//b的值变为3,a的值为5
a = a+b;//b的值为8,a的值相加之后变成8

2.通过异或的方法来交换
int a = 3;
int b = 8;
a=a^b;
b=b^a;// b=b^a=b^(a^b)=a,此时a的值已经赋给b,但是a的结果为a^b
a=b^a;//a=b^a=a^(a^b)=b,完成交换

不过我觉得如果是引用型数据类型就不行了吧!如果是引用型数据还是用中间变量的方法吧,这种方法容易想到,也容易阅读!
回复 使用道具 举报
楼主该好好看视频了
回复 使用道具 举报
本帖最后由 朱东方 于 2012-6-20 13:12 编辑

楼上只说了两种,还有一种"最常用"的。

用中间变量 temp

temp=a;    //a的值赋给中间变量temp
a=b;          //b的值赋给a
b=temp;   //中间变量temp的值也就是a的值赋给b
回复 使用道具 举报
毕老师基础视频02天的
1,通过第三方变量
                int a = 3 , b = 8;
                int z;
                z = a;
                a = b;
                b = z;
不用第三方变量:               
                b = b + a;
                a = b - a;
                b = b - a;
               
                b = b ^ a;
                a = b ^ a;
                b = b ^ a;
                 
               
回复 使用道具 举报

                b = b + a;
                a = b - a;
                b = b - a;

                b = b ^ a;
                a = b ^ a;
                b = b ^ a;
回复 使用道具 举报
class JaioHuan
{
        public static void main(String[] args)
        {
                int a=8,b=3;
                a = a+b;  //此时经过运算a=11;
                System.out.println(a);//输出a=11;
                   b = a-b;   //b=11-3=8;
                   a = a-b;   //a=11-8=3;
                System.out.println(a+"..."+b);

        }
}
其实说来说去还是相当于有第三方变量进来进行交换的、
回复 使用道具 举报
郑冬 中级黑马 2012-6-20 15:05:52
9#
代码如下:

int a = 10, b = 2;
a = a + b;
b = a - b;
a = a - b;

复制代码 代码如下:
int a = 10000,b=245
a = a^b;
b = b^a;
a = a ^b;

复制代码 代码如下:
int a = 33,b=44
a=[a,b]
b=a[0]
a=a[1]

复制代码 代码如下:
int a = 23,b=454;
a = {a:b,b:a};
b = a.b;
a = a.a;

回复 使用道具 举报
利用^运算符(异或运算),
a=a^b;
b=a^b;
a=a^b;
就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马