java进行两数交换时,如何不用中间量就交换?

比如说要进行两数交换的时候需要设定以个变量temp用它作为中间量倒我像问的是如何不用这个中间量就能给两数调换,请高人指点迷津对,就是用引用型对象来实现请这位仁兄帮忙指点下... 比如说要进行两数交换的时候需要设定以个变量temp 用它作为中间量倒
我像问的是如何不用这个中间量就能给两数调换 ,请高人指点迷津
对,就是用引用型对象来实现 请这位仁兄帮忙指点下 谢谢了
展开
 我来答
MockingMen
推荐于2017-10-03 · TA获得超过352个赞
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:79.5万
展开全部
方法有很多,这里举出两种常用的:
方法1:使用^操作来实现
int x = 10;
//用二进制表示:x=0b1010;
int y = 15;
//用二进制表示:x=0b1111;
System.out.println("x="+x+" y="+y);
x = x^y;
//x^y= 0b1010^0b1111 = 0b0101
y = x^y;
//x^y= 0b0101^0b1111 = 0b1010 =10
x = x^y;
//x^y= 0b0101^0b1010 = 0b1111 =15
System.out.println("x="+x+" y="+y);
方法2:使用+,-操作来实现
int x = 10;
int y = 15;
System.out.println("x="+x+" y="+y);
x = x+y;
//x= 10+15=25
y = x-y;
//y= 25-15=10
x = x-y;
//x= 25-10=15
System.out.println("x="+x+" y="+y);
结果:
x=10 y=15
x=15 y=10
早期为了减少中间变量对计算机内存的占用,采用中间的方法来交换数据。其实这种交换并不完美,如果交换的两个数都很大,可能会内存溢出。在现在的开发中建议使用中间值来交换数值。
Brantolstoyang
2015-11-04
知道答主
回答量:27
采纳率:0%
帮助的人:14.4万
展开全部

先看第一个算法

static class Num{
    int a;
    int b;
}
public static void swap1(Num num){
    num.a = num.a + num.b;
    num.b = num.a - num.b;
    num.a = num.a - num.b;
}

上面代码通过“+”运算符将a和b的运算结果赋给了a(这时a是中间变量)。然后再计算b,这时a的值已经是(a+b)了,因此,a再减b就是原来的a。 而这时b已经是原来的a了,因此,再用运算后的a(实际上是a+b)减运算后的b(实际上是原来的a),就是原来的b了,最后将这个b赋值给a。

实际上,我们还可以使用“*”、“/”等符号来实现同样的效果,代码如下:

public static void swap2(Num num){
    num.a = num.a * num.b;
    num.b = num.a / num.b;
    num.a = num.a / num.b;
}
public static void swap3(Num num){
    num.a = num.a - num.b;
    num.b = num.a + num.b;
    num.a = num.b - num.a;
}

上面代码在Java中没有什么问题(但使用“/”时,分母和分子不能为0)。就算溢出也会得到正确的结果,但有某些语言中(如C语言),可能会抛出溢出错误,不了避免这种错误。可以加判断,代码如下:

public static void swap4(Num num){
    // 不同符号
    if (num.a * num.b <= 0)
    {
        num.a = num.a + num.b;
        num.b = num.a - num.b;
        num.a = num.a - num.b;
    }
    else
    {

        num.a = num.a - num.b;
        num.b = num.a + num.b;
        num.a = num.b - num.a;
    }
}

当然,我们还有更好的方法,就是使用异或运算符,我们知道,任何数与0异或后仍然为它本身,两个相同的数异或后为0。根本这种特性,可以有如下代码:

public static void swap5(Num num){
    num.a = num.a ^ num.b;
    num.b = num.a ^ num.b;
    num.a = num.a ^ num.b;
}

文章出自:http://www.cnblogs.com/nokiaguy/archive/2010/07/28/1787271.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
309736
推荐于2017-09-28 · TA获得超过199个赞
知道答主
回答量:57
采纳率:0%
帮助的人:50.3万
展开全部
是可以实现的!举一个简单的例子!
int a;int b;
a=a+b;//举例a=10,b=20,那么,现在a=30,b=20
b=a-b;//b=30-20=10
a=a-b;//a=30-10=20
//a=20,b=10.交换成功
不借用第三变量做数据交换的方法有很多,不过我就记住这一种!好像还有个异或运算也能实现!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
知春细雨蒙
2015-11-25 · 混迹网络滴知春细雨蒙,知无不答
知春细雨蒙
采纳数:3039 获赞数:63039

向TA提问 私信TA
展开全部
你可以进行如下操作:
int a;
int b;
a=a+b;//举例a=10,b=20,那么,现在a=30,b=20
b=a-b;//b=30-20=10
a=a-b;//a=30-10=20
//a=20,b=10.交换成功
个人方法,仅供参考!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友56898b9
2015-11-16 · TA获得超过103个赞
知道答主
回答量:27
采纳率:0%
帮助的人:17.2万
展开全部
是可以实现的!举一个简单的例子!
int a;int b;
a=a+b;//举例a=10,b=20,那么,现在a=30,b=20
b=a-b;//b=30-20=10
a=a-b;//a=30-10=20
//a=20,b=10.交换成功
不借用第三变量做数据交换的方法有很多,还有异或运算也能实现。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式