耐人尋味的數(shù)值類數(shù)據(jù)交換:不使用第三方變量進(jìn)行數(shù)據(jù)交換
? ? ? ? ? 對(duì)于本篇博客,我實(shí)則很早之前就想寫了。不過,當(dāng)時(shí)沒有時(shí)間,就拖到今天寫了。
? ? ? ? ? ?對(duì)于數(shù)值類型的數(shù)據(jù),當(dāng)2個(gè)變量進(jìn)行數(shù)據(jù)交換時(shí),我們一般會(huì)使用第三方變量進(jìn)行數(shù)值交換。代碼與運(yùn)行結(jié)果如下所示:?
? ? ? ? ? 代碼?
public static void main(String[] args) {
// 使用第3方變量來進(jìn)行數(shù)據(jù)交換
test1();
// 不使用第3方變量進(jìn)行數(shù)據(jù)交換:算法方式一
//test2();
// 不使用第3方變量進(jìn)行數(shù)據(jù)交換:算法方式二
//test3();
}
public static void test1() {
double a = 3.14, b = 5.28, c = 0.0;
System.out.println("交換前a、b的值為:");
System.out.println("a= " + a);
System.out.println("b= " + b);
c = a;
a = b;
b = c;
System.out.println("交換后a、b的值為:");
System.out.println("a= " + a);
System.out.println("b= " + b);
System.out.println("c= " + c);
}? ? ? ? ? 運(yùn)行結(jié)果
? ? ? ? ? ? 同時(shí),對(duì)于2個(gè)數(shù)值型數(shù)據(jù)進(jìn)行交換時(shí),也可不采用第三方變量的方式來實(shí)現(xiàn)。在這里,我自己列出2個(gè)小的算法來實(shí)現(xiàn)這個(gè)功能。對(duì)于2個(gè)算法之間為何會(huì)出現(xiàn)一些精確度數(shù)據(jù)的差異,我個(gè)人也是不懂。如果有知道的網(wǎng)友,可以回復(fù)我,告知一下,謝謝。
??算法方式一:
? ? ? ? ? 代碼?
public static void main(String[] args) {
// 使用第3方變量來進(jìn)行數(shù)據(jù)交換
//test1();
// 不使用第3方變量進(jìn)行數(shù)據(jù)交換:算法方式一
test2();
// 不使用第3方變量進(jìn)行數(shù)據(jù)交換:算法方式二
//test3();
} public static void test2() {
double a = 3.14, b = 5.28;
System.out.println("交換前a、b的值為:");
System.out.println("a= " + a);
System.out.println("b= " + b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("交換后a、b的值為:");
System.out.println("a= " + a);
System.out.println("b= " + b);
}? ? ? ? ? 運(yùn)行結(jié)果?
??算法方式二:
? ? ? ? ? 代碼?
public static void main(String[] args) {
// 使用第3方變量來進(jìn)行數(shù)據(jù)交換
//test1();
// 不使用第3方變量進(jìn)行數(shù)據(jù)交換:算法方式一
//test2();
// 不使用第3方變量進(jìn)行數(shù)據(jù)交換:算法方式二
test3();
}
public static void test3() {
double a = 3.14, b = 5.28;
System.out.println("交換前a、b的值為:");
System.out.println("a= " + a);
System.out.println("b= " + b);
a = a - b;
b = a + b;
a = b - a;
System.out.println("交換后a、b的值為:");
System.out.println("a= " + a);
System.out.println("b= " + b);
}? ? ? ? ? 運(yùn)行結(jié)果?





