【Java】不使用第三方变量交换两个变量的值
来源:互联网 发布:浙江贰贰网络 看准网 编辑:程序博客网 时间:2024/05/22 08:24
在语言学习和进行程序设计的时候,我们交换两个变量最常使用的方法是借助temp这个新的变量进行转换,代码如下:
-----------------------------------------
<--标准算法-->
-----------------------------------------
int a = 3, b = 4;
int temp = a;
a = b;
b = temp;
-----------------------------------------
这种方法易于理解,特别适合初学者了解计算机程序的特点,是赋值语句的经典应用,在实际开发中,此法简单明了,不会产生歧义,便于交流。
但是这个算法的弊端是需要借助第三方变量--临时变量,效率不是很高。
-----------------------------------------
下面介绍不借助临时变量怎么进行转换的方法
1、算术算法
简单而言,就是普通的 + 和 - 的运算来实现,代码如下:
-----------------------------------------
int a = 3, b = 4;
a = a+b;
b = a-b;
a = a-b;
-----------------------------------------
算术原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。
具体过程:
第一句“a = a+b”求出ab两点的距离之和,并且将其保存在a中;
第二句“b = a-b”求出a到原点的距离,并且将其保存在b中;
第三句“a = a-b”求出b到原点的距离,并且将其保存在a中。
完成交换。
此算法与标准算法相比,多了三个计算的过程,但是没有借助临时变量
2、异或算法
通过异或运算也能实现变量的交换,这也许是最为神奇的,请看以下代码:
-----------------------------------------
int a = 3, b = 4;
a = a^b;
b = a^b;
a = a^b;
-----------------------------------------
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。 即:
a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。
异或运算最大的好处是直接进行二进制数据操作,大大节约了转换的时间效率。
-----------------------------------------
唠叨两句:
数学中的小技巧对程序设计而言具有相当的影响力,运用得当会有意想不到的效果。
- 不使用第三方变量交换两个变量的值
- 不使用第三方变量交换两个变量的值
- 不使用第三方变量交换两个变量的值
- 不使用第三方变量交换两个变量的值
- 不使用第三方变量交换两个变量的值
- 不使用第三方变量,交换两个变量的值
- 不使用第三方变量交换两个变量的值
- 不使用第三方变量,交换两个变量的值
- 不使用第三方变量交换两个数值变量的值(java语言)
- 【Java】不使用第三方变量交换两个变量的值
- 【Java】不使用第三方变量交换两个变量的值
- 不使用第三方变量交换两个参数的值
- 不使用第三方变量交换函数的两个参数
- 如何在不使用第三方变量的前提下,交换两个变量的值 (Java实现)
- 【转】不使用第三方变量交换两个变量的值
- 黑马程序员--不使用第三方变量交换两个变量的值
- 不使用第三方变量来交换两个变量的值
- 如何不使用第三方变量交换两个变量的值
- Makefile详解-程序的编译和链接
- tensorflow学习笔记(十四):tensorlfow操作gradient
- Python基础学习--字符串格式化
- Mybatis学习笔记一:环境搭建以及简单使用
- 开发一个好项目:三、创建数据源,首先创建本地数据源
- 【Java】不使用第三方变量交换两个变量的值
- 使用hibernate传入数据到数据库出现乱码问题解决
- android开发(如何开发一个可以维护的好项目):四 、项目结构
- Makefile详解-介绍
- entity framwork 链接字符串不保存在config文件方法
- linux install maven
- 专访 iOS 技术专家孙源:开发者的成长始于“死磕”
- 亲测可用,写给小白的Android支付宝集成(超级详细)
- 给anaconda设置代理来访问包来源