话题15 异曲同工--交换变量的3种方式

来源:互联网 发布:研究生课程表软件 编辑:程序博客网 时间:2024/06/01 07:20

下面介绍2个变量交换的3种方式。

1 . 普通方法。

见代码:
/** *  */package huati15;/** * @author Vayne * */public class SwapTest {public static void main(String[] args) {int i = 5;int j = 7;swap(i, j);System.out.println(i);System.out.println(j);Value va = new Value(i, j);swap(va);System.out.println(va.i);System.out.println(va.j);}/** * @param va */private static void swap(Value va) {// TODO Auto-generated method stubint temp = va.i;va.i = va.j;va.j = temp;}/** * @param i * @param j */private static void swap(int i, int j) {// TODO Auto-generated method stubint temp = i;i = j;j = temp;}}class Value {int i;int j;public Value(int i, int j) {// TODO Auto-generated constructor stubthis.i = i;this.j = j;}}

运行结果:
5775

形参的改变是不能反作用于实参的。但是可以通过引用来改变成员变量的值。

2 . 相加与相减的方法

有的时候在不能引入第三个变量的前提下去交换2个变量的值,但是会产生溢出问题。可以使用下面的方法:
/** *  */package huati15;/** * @author Vayne * */public class SwapTest2 {public static void main(String[] args) {int i = 5;int j = 7;Value value = new Value(i, j);swap2(value);System.out.println(value.i);System.out.println(value.j);}/** * @param i * @param j */private static void swap2(Value value) {// TODO Auto-generated method stubvalue.i = value.i + value.j;value.j = value.i - value.j;value.i = value.i - value.j;}}

运行结果:
75
这是利用2个数和的方法,我们同理也可以使用2个数差的方法。不再做介绍。

3 . 位运算实现变量交换

位异或运算符有这样的性质:(x^y^y)=x。因此可以利用这个性质去交换变量,在这个过程中也没有使用第三方变量。
代码如下:
/** *  */package huati15;/** * @author Vayne * */public class SwapTest3 {public static void main(String[] args) {Value value1 = new Value(5, 10);swap3(value1);System.out.println(value1.i);System.out.println(value1.j);}/** * @param i * @param j */private static void swap3(Value value) {// TODO Auto-generated method stubvalue.i = value.i ^ value.j;value.j = value.i ^ value.j;value.i = value.i ^ value.j;}}

结果:
105
这方法较好。不会产生溢出问题。


0 0
原创粉丝点击