java(引入一个中间变量,不引入中间变量)交换两个变量的值

时间:2023-01-07 18:12:06

一、描述

在不引入其它变量的情况下交换两个数,引入一个变量做中介,交换两个数的值,第一种是引入一个临时变量,第二种是将两个数的和存放在其中一个变量中,第三种方法是使用异或运算,一个数异或上任意一个数两次都还是自己。

二、源代码

package tong.yue.sort;

public class SwapTwoValues {

/**
* @param args
*/
public static void main(String[] args) {
int a = 10,b = 20;
swapByExtraVariable(a,b);
swapBySelf(a,b);
swapByXOR(a,b);
//这里采用值传递,只是复制一个a,b的副本去参加函数的运算,并不影响main函数中原来的a和b的值
System.out.println("main function: a="+a+",b="+b);
}

private static void swapBySelf(int a, int b) {
// 在不引入其它变量的情况下交换两个数,利用两数之和来做
a = a+b; //a保存两数之和
b = a-b; //两数之和-b,即为a
a = a-b; //两数之和-b,此时的b已经变成了a,所以相当于sum-a=b
System.out.println("swapBySelf first function:a="+a+",b="+b);
//还有另一种方法,利用两数之差,即两数之间的距离
a = b-a; //a=两者的差
b = b-a; //b = 原来的b-两数的距离==原来的a
a = a+b; //最终的a=两者之差+原来的a==原来的b
System.out.println("swapBySelf second function:a="+a+",b="+b);//又换回来了
}

private static void swapByExtraVariable(int a, int b) {
// 引入一个变量做中介,交换两个数
int temp = a;
a = b;
b = temp;
System.out.println("swapByExtraVariable function:a="+a+",b="+b);

}
//已知x^k^k==x,即一个数与任意一个数作两次异或运算都会变成原来的自己
private static void swapByXOR(int a, int b) {
// 在不引入其它变量的情况下交换两个数,利用异或来做
a = a^b; //a保存两数异或的中间结果
b = a^b; //a两次异或b就变成原来的a,并将其赋值给了b
a = a^b; //b两次异或a就变成原来的b,并且将其赋值给了a
System.out.println("swapByXOR first function:a="+a+",b="+b);

}

}


三、运行结果

java(引入一个中间变量,不引入中间变量)交换两个变量的值