java-交换值的算法

方法一.借助中间量交换

public static void main(String [] args){/*
	int x=10;
	int y=20;
	int temp=x;
	x=y;
	y=temp;
	System.out.println("x:"+x+"y:"+y);*/
	
	}

方法二.数值相加减交换

     * 算术算法 它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。 具体过程:
     * 第一句“a=b-a”求出ab两点的距离,并且将其保存在a中;
     * 第二句“b=b-a”求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存在b中;
     * 第三句“a=b+a”求出b到原点的距离(a到原点距离与ab两点距离之和),并且将其保存在a中。完成交换。
     * 此算法与标准算法相比,多了三个计算的过程,但是没有借助临时变量。(算术算法)
import java.util.Scanner;
public class Test{
	public static void main(String [] args){
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入a");
	int a=sc.nextInt();
	System.out.println("请输入b");
	int b=sc.nextInt();
    jiaohuan(a,b);
	}
	public static void jiaohuan(int a,int b)
	{
		a = b - a;
        b = b - a;
        a = b + a;
        System.out.println(a + "  " + b);
	}
}

方法三.异或的方法
异或 相同为0 不同为1 此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。
这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
即:abb=a。将a=ab代入b=ab则得b=abb=a;同理可以得到a=baa=b;轻松完成交换。

import java.util.Scanner;
public class Test{
	public static void main(String [] args){
	Scanner sc=new Scanner(System.in);
	System.out.println("请输入a");
	int a=sc.nextInt();
	System.out.println("请输入b");
	int b=sc.nextInt();
    jiaohuan(a,b);
	}
	public static void jiaohuan(int a,int b)
	{
	    a = a ^ b;// 1010 ^ 1100 1001
        b = a ^ b;// 1001 ^ 1100 1010
        a = a ^ b;// 1001 ^ 1010 1100
        System.out.println(a + "  " + b);
	}
}

输入的结果:
这里写图片描述

此方法中是用的异或^的知识点,将输入的20,30转换成二进制进行运算

你可能感兴趣的:(java,中软学习-javaSE,java-算法)