packagecom.zby.bubble;/*** 三种方法交换两个整数的值
*
*@authorzby
**/
public classExchange {public static voidmain(String[] args) {
splitLine();
exchange1(Integer.MAX_VALUE, Integer.MAX_VALUE- 1);
exchange1(99, 100);
exchange1(Integer.MIN_VALUE, Integer.MIN_VALUE+ 1);
splitLine();
exchange2(Integer.MAX_VALUE, Integer.MAX_VALUE- 1);
exchange2(99, 100);
exchange2(Integer.MIN_VALUE, Integer.MIN_VALUE+ 1);
splitLine();
exchange3(Integer.MAX_VALUE, Integer.MAX_VALUE- 1);
exchange3(99, 100);
exchange3(Integer.MIN_VALUE, Integer.MIN_VALUE+ 1);
splitLine();
}/*** 使用一个临时变量交换,优点:对于其他类型同样适用。
*
*@parama
*@paramb*/
public static void exchange1(int a, intb) {
System.out.println("使用临时变量法进行交换,引入第三方变量");
System.out.println("交换之前:a=" + a + ",b=" +b);int temp =a;
a=b;
b=temp;
System.out.println("交换之后:a=" + a + ",b=" +b);
}/*** 重点:一个整数异或另一个整数两次,得到的还是这个原来的数。优点:不引入临时变量;缺点:只能对整数使用。
*
*@parama
*@paramb*/
public static void exchange2(int a, intb) {
System.out.println("使用异或法进行交换,不引入第三方变量");
System.out.println("交换之前:a=" + a + ",b=" +b);
a^=b;
b^=a;
a^=b;
System.out.println("交换之后:a=" + a + ",b=" +b);
}/*** 注意:加减法交换可能导致溢出,但是,没影响!!!!!溢出去又溢回来,结果是对的,是可以放心用的!!!!!之前进入误区以为溢出会有什么问题,然而并没有。
*
*@parama
*@paramb*/
public static void exchange3(int a, intb) {
System.out.println("使用加减法进行交换,不引入第三方变量");
System.out.println("交换之前:a=" + a + ",b=" +b);
a+=b;
b= a -b;
a-=b;
System.out.println("交换之后:a=" + a + ",b=" +b);
}public static voidsplitLine() {
System.out.println("----------华丽丽的分割线----------");
}
}