交换两个整数的三种方法

Posted 龘驫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换两个整数的三种方法相关的知识,希望对你有一定的参考价值。

package com.zby.bubble;

/**
 * <class description> 三种方法交换两个整数的值
 * 
 * @author zby
 *
 */
public class Exchange {

    public static void main(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();
    }

    /**
     * <method description>使用一个临时变量交换,优点:对于其他类型同样适用。
     * 
     * @param a
     * @param b
     */
    public static void exchange1(int a, int b) {
        System.out.println("使用临时变量法进行交换,引入第三方变量");
        System.out.println("交换之前:a=" + a + ",b=" + b);
        int temp = a;
        a = b;
        b = temp;
        System.out.println("交换之后:a=" + a + ",b=" + b);
    }

    /**
     * <method description>重点:一个整数异或另一个整数两次,得到的还是这个原来的数。优点:不引入临时变量;缺点:只能对整数使用。
     * 
     * @param a
     * @param b
     */
    public static void exchange2(int a, int b) {
        System.out.println("使用异或法进行交换,不引入第三方变量");
        System.out.println("交换之前:a=" + a + ",b=" + b);
        a ^= b;
        b ^= a;
        a ^= b;
        System.out.println("交换之后:a=" + a + ",b=" + b);
    }

    /**
     * <method description>注意:加减法交换可能导致溢出,但是,没影响!!!!!溢出去又溢回来,结果是对的,是可以放心用的!!!!!之前进入误区以为溢出会有什么问题,然而并没有。
     * 
     * @param a
     * @param b
     */
    public static void exchange3(int a, int b) {
        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 void splitLine() {
        System.out.println("----------华丽丽的分割线----------");
    }
}
----------华丽丽的分割线----------
使用临时变量法进行交换,引入第三方变量
交换之前:a=2147483647,b=2147483646
交换之后:a=2147483646,b=2147483647
使用临时变量法进行交换,引入第三方变量
交换之前:a=99,b=100
交换之后:a=100,b=99
使用临时变量法进行交换,引入第三方变量
交换之前:a=-2147483648,b=-2147483647
交换之后:a=-2147483647,b=-2147483648
----------华丽丽的分割线----------
使用异或法进行交换,不引入第三方变量
交换之前:a=2147483647,b=2147483646
交换之后:a=2147483646,b=2147483647
使用异或法进行交换,不引入第三方变量
交换之前:a=99,b=100
交换之后:a=100,b=99
使用异或法进行交换,不引入第三方变量
交换之前:a=-2147483648,b=-2147483647
交换之后:a=-2147483647,b=-2147483648
----------华丽丽的分割线----------
使用加减法进行交换,不引入第三方变量
交换之前:a=2147483647,b=2147483646
交换之后:a=2147483646,b=2147483647
使用加减法进行交换,不引入第三方变量
交换之前:a=99,b=100
交换之后:a=100,b=99
使用加减法进行交换,不引入第三方变量
交换之前:a=-2147483648,b=-2147483647
交换之后:a=-2147483647,b=-2147483648
----------华丽丽的分割线----------

 

以上是关于交换两个整数的三种方法的主要内容,如果未能解决你的问题,请参考以下文章

实现两个变量的值交换的三种方法(两种方法不使用中间变量)

Java小案例——交换两个数值的三种方法

交换函数swap的三种实现方法

交换两个变量的值的三种实现方式

交换俩数的三种方法

java代码[No.4]—快速排序算法的三种方式及其优化