c语言函数交换两个数的值(Java中交换两个变量的几种方式)

首页常识更新时间:2023-09-23 00:54:33

编程中,有时候我们需要交换两个变量,在考试和找工作的笔试中,也经常能遇到类似的问题,于是我总结了几种交换变量的方法。

1、通过第三个变量进行交换

这是最简单、最常用、最容易理解的一种交换方法,通过将需要交换的变量存放到一个临时变量中,进行交换,形象的比喻就是假如我要和姐姐换房间,我需要把我房间里的东西腾空,就是把我房间里的东西放到客厅中,然后把姐姐房间中的物品放到我房间中,再把我的物品放到姐姐原本的房间中,就完成了房间的交换,在代码中实现就是:

public class Test06 { public static void main(String[] args) { int a = 10; int b = 5; int c ; c = a ; a = b ; b = c ; System.out.println("a=" a ",b=" b); } //控制台输出a=5,b=10 }

原理:

这样就完成了两个变量的交换,具体的含义就是先把a的值赋值给临时变量c,再将b的值赋值给a,此时就将b的值换到了a,最后将临时变量c中的值(a的值)赋值给b,就完成了一次交换。

2、利用加减法进行交换(1)

不通过第三个变量进行交换的方式,一行代码完成交换,简洁明了。

public class Test07 { public static void main(String[] args) { int a = 10; int b = 5 ; a = a b - (b = a); System.out.println("a=" a ",b=" b); } //控制台输出a=5,b=10 }

原理:

做计算时从左往右,先将a和b求和,括号中将a的值赋值给b,就相当于括号中就是a,a b-a=b,再将b的值赋值给a,就完成了交换。

3、利用加减法进行交换(2)

这种方式和2有点类似,也是通过加减法进行交换,但是在使用时要注意数据类型的转换以及数据在加法之后是否溢出,避免不必要的麻烦。

public class Test08 { public static void main(String[] args) { int a = 10; int b = 5; a = a b; b = a - b; a = a - b; System.out.println("a=" a ",b=" b); } //控制台输出a=5,b=10 }

原理:

将a和b求和,赋值给a,a-b实际上是a的值,赋值给b,此时b已经变成了a的值,那么a和b的和减去a的值就是b,再通过赋值运算符把b的值赋值给a,就完成了交换。

4、利用乘除法进行交换

这种方式类方式3大同小异,在使用时也要注意数据是否溢出,并且两个变量均不能为0,0不能作为分母。

public class Test09 { public static void main(String[] args) { int a = 10 ; int b = 4 ; a = a * b; b = a / b; a = a / b; System.out.println("a=" a ",b=" b); } //控制台输出a=5,b=10 }

原理:

将a和b的积赋值给a,此时ab的积除b就是a,将a的值通过赋值运算符赋值给b,此时b的值就是原本a的值,这时再将ab的积(a)除b,因为b的值已经被赋值成原本a的值,那么ab的积除b就是原本b的值,再将b的值赋值给a,就完成了交换

5、通过异或运算交换两个数

位运算效率比普通的加减乘除高,在适应的场景下可以采用异或运算,但是这种方式不能用来交换两个相同的变量。

public class Test10 { public static void main(String[] args) { int a = 10; int b = 5; a = a ^ b; b = a ^ b; a = a ^ b; System.out.println("a=" a ",b=" b); } //控制台输出a=5,b=10 }

原理:

在本例中,交换流程可以用下表来表示

a

b

a = a ^ b

a ^ b

b

b = a ^ b

a ^ b

a ^ b ^ b == a

a = a ^ b

a ^ b ^ a == b

a

结果

b

a

6、总结

在编程过程中,普遍用到的是第一种方式,其他方式各有各的优缺点,需要根据不同场景选择,当然交换变量的方式也不是只有这几种,根据不同的需求选择使用的即可。

,
展开阅读全文
推荐内容
热门内容
热门文章

© 2007-2022 http://www.anhuiqq.cn,All Rights Reserved.