JAVA交换两个数常用的三种方法

JAVA交换两个数常用的三种方法

  1. 中间变量法
  2. 数学运算法
  3. 数学运算法
    话不多suo,开干
第一种、中间变量法

整体思路:有两个整形变量a和b,先将a付给第三个变量c,这样a就存储下来,所以讲b赋给a,再讲c赋给b,就完成了交换,代码如下:

public static void main(String[] args) {

		int a = 2;
		int b = 4;
		int c = a;//将a用临时变量c保存下来
		
		System.out.print("交换之前a是" + a);
		System.out.println(";交换之前b是" + b);
		
		a = b;
		b = c;
		
		System.out.print("交换之后a是" + a);
		System.out.print(";交换之后b是" + b);
		
	}

输出结果为:

				交换之前a是2;交换之前b是4
				交换之后a是4;交换之后b是2
第二种、数学运算法

整体思路:先将两变量a和b的和赋给其中一个变量(如a),另一个变量b则等于和减去第一个变量(也就是 b = a - b),这样变量a也就等于a-b,代码如下:

	public static void main(String[] args) {

		int a = 2;
		int b = 4;
		
		System.out.print("交换之前a是" + a);
		System.out.println(";交换之前b是" + b);
		
		a = a + b;
		b = a - b;
		a = a - b;
		
		System.out.print("交换之后a是" + a);
		System.out.print(";交换之后b是" + b);
	}

执行结果如下

		交换之前a是2;交换之前b是4
		交换之后a是4;交换之后b是2
第三种、异或运算法(只针对整数有用!)

这个在代码中解释,代码如下:

public static void main(String[] args) {

		int a = 2;
		int b = 4;
		
		System.out.print("交换之前a是" + a);
		System.out.println(";交换之前b是" + b);
		
		a = a ^ b;//^异或运算
		b = a ^ b;//
		a = a ^ b;
		
		System.out.print("交换之后a是" + a);
		System.out.print(";交换之后b是" + b);
	}

执行结果如下

		交换之前a是2;交换之前b是4
		交换之后a是4;交换之后b是2

那么怎么理解呢!!
首先解决异或运算,也就是 ^

  • 参加运算的两个数据,按二进制位进行“异或”运算

  • 例如:
    2^4可写成算式如下:
    2的二进制是0000 0010
    4的二进制是0000 0100
    异或运算就是二进制相同0,不相同为1;
    则2 ^ 4 = 0000 0110 = 6

    a = a ^ b 也就是 a = 2 ^ 4 = 6
    同理:
    b = a ^ b 也就是 a = 6 ^ 4 = 0000 0110 ^ 0000 0100 = 0000 0010 = 2
    a = a ^ b 也就是 a = 6 ^ 2 = 0000 0110 ^ 0000 0010 = 0000 0100 = 4
    这样不就完成了交换;

    如果这样不能理解那么,下面有更好理解的QAQ!!!
    首先异或运算拥有交换律和结合律的,那么上面的代码:

		int a = 2;
		int b = 4;
		
		System.out.print("交换之前a是" + a);
		System.out.println(";交换之前b是" + b);
		
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		
		System.out.print("交换之后a是" + a);
		System.out.print(";交换之后b是" + b);
    这里第一步是                                 a = a ^ b
	第二步 	                              b = a ^ b=  a ^ b ^ b
	运用结合律可以将b ^ b先做运算;
	那么可化为                    b = a ^ b = a ^ b ^ b = a ^ (b ^ b)
	因为异或运算是将数字化为二进制判断,相同的变为0,那么b和b本身异或运算
	b和b的二进制一模一样,所以全为0,也就是     b ^ b = 0;
	那么就是                            b = a ^ b=  a ^ b ^ b = a ^ 0
	那么这个怎么算呢,0和a异或运算,a化成二进制中1全部和0异或运算都是1,
	0和0还是0,是不是就没变还是a。 
	 故  				  b = a ^ b=  a ^ b ^ b = a ^ 0 = a = 2

理解了这个,那么看这个带注释的代码肯定没问题了!!

public static void main(String[] args) {

		int a = 2;
		int b = 4;
		
		System.out.print("交换之前a是" + a);
		System.out.println(";交换之前b是" + b);
		
		a = a ^ b;//^异或运算
		b = a ^ b;//b = a ^ b=  a ^ b ^ b = a ^ 0 = a = 2
				//看不懂的话看这个代码上面的解释
		a = a ^ b;//最后a = a ^ b=  a ^ b ^ a = (a ^ a) ^ b = b = 4
		
		System.out.print("交换之后a是" + a);
		System.out.print(";交换之后b是" + b);
	}

//Are you ok??

你可能感兴趣的:(JAVA学习之路)