java(引入一个中间变量,不引入中间变量)交换两个变量的值
2015-04-18 23:00
387 查看
一、描述
在不引入其它变量的情况下交换两个数,引入一个变量做中介,交换两个数的值,第一种是引入一个临时变量,第二种是将两个数的和存放在其中一个变量中,第三种方法是使用异或运算,一个数异或上任意一个数两次都还是自己。
二、源代码
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);
}
}
三、运行结果
在不引入其它变量的情况下交换两个数,引入一个变量做中介,交换两个数的值,第一种是引入一个临时变量,第二种是将两个数的和存放在其中一个变量中,第三种方法是使用异或运算,一个数异或上任意一个数两次都还是自己。
二、源代码
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] 一条新闻引出的思考,关于不用中间变量交换两个变量的值
- 使用位运算实现判断一个数是否是2的n次方,实现不需要中间变量进行两个变量值的交换
- a ^= b ^= a ^= b看到了一个不需要中间变量交换两个的得方法
- Java不借助中间变量,交换两个变量的值的方法
- Java--交换两个变量的值的三种方法:借助中间量交换,数值相加减交换,位移运算交换
- 变量交换 如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡, 但也可以在不借助任何其它变量的情况下完成。
- 交换两个变量的值,不使用中间变量的四种法方法
- 不使用中间变量来交换两个变量的值
- Java 如何交换两个变量
- 不适用中间变量交换两个数值型变量的值
- 【转】 不用中间变量,实现两个变量的交换
- [转]不使用中间变量,交换两个数值变量的值
- 不使用第三方变量交换两个数值变量的值(java语言)
- Java实现两个整数变量的交换
- 交换两个变量的值,不创建中间变量。求函数返回参数二进制中 1 的个数
- java 实现两个变量的互换(不借助第三个变量,即中间变量、临时变量)
- java中两个变量之间交换方法总结
- 不用中间变量,实现两个变量的交换
- 如何不引入第三个变量交换两个变量的值?