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