交換兩個整數的三種方法


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
----------華麗麗的分割線----------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM