耐人寻味的数值类数据交换:不使用第三方变量进行数据交换
扫描二维码
随时随地手机看文章
对于本篇博客,我实则很早之前就想写了。不过,当时没有时间,就拖到今天写了。
对于数值类型的数据,当2个变量进行数据交换时,我们一般会使用第三方变量进行数值交换。代码与运行结果如下所示:
代码
public static void main(String[] args) {
// 使用第3方变量来进行数据交换
test1();
// 不使用第3方变量进行数据交换:算法方式一
//test2();
// 不使用第3方变量进行数据交换:算法方式二
//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);
}
运行结果
同时,对于2个数值型数据进行交换时,也可不采用第三方变量的方式来实现。在这里,我自己列出2个小的算法来实现这个功能。对于2个算法之间为何会出现一些精确度数据的差异,我个人也是不懂。如果有知道的网友,可以回复我,告知一下,谢谢。
算法方式一:
代码
public static void main(String[] args) {
// 使用第3方变量来进行数据交换
//test1();
// 不使用第3方变量进行数据交换:算法方式一
test2();
// 不使用第3方变量进行数据交换:算法方式二
//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);
}
运行结果
算法方式二:
代码
public static void main(String[] args) {
// 使用第3方变量来进行数据交换
//test1();
// 不使用第3方变量进行数据交换:算法方式一
//test2();
// 不使用第3方变量进行数据交换:算法方式二
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);
}
运行结果