编程中如何不使用中间变量的情况下将两个变量的值进行交换

一点回忆

如何将两个变量的值互相交换?看到这个问题,不由得勾起了高中时代的一些记忆。那时正值高一,好像正在学习着数学课本上的一些程序框图的课程,当时的数学老师以这道题为例进行课程的讲解,讲解过后,还自己编写了一段代码,给我们演示了下。至于老师当时使用的编程语言、编程工具、编程环境,等等这些,都不清楚,因为当时计算机对于我们来说,还是很神秘莫测的。给我留下较深印象的是老师对这道题解法的幽默风趣的讲解:
现在有两个变量,a和b,a是墨水桶,装着墨水,而b是辣椒桶,装着辣椒。交换a和b的值,相当于墨水桶要换成装辣椒,而辣椒桶要换成装墨水。这样处理:
1. 引入一个新的变量,即拿来一个新的桶,将原先墨水桶的墨水倒到新桶,此时墨水桶空出来了
2. 将辣椒桶的辣椒倒到墨水桶,墨水桶成功换成装辣椒,此时辣椒桶空出来了
3. 将新桶的墨水倒到辣椒桶,辣椒桶成功换成装墨水。

故事继续,后来接触了编程,在入门时,又碰到了这个问题,只不过,这一次需要自己动手编写代码来解决了。

使用中间变量交换两个变量

这是比较普遍的算法。

// 采用Java语言相应实现
public static void main(String[] args) {
	int a = 11;
	int b = 22;
	System.out.println("交换前:变量a=" + a + ",变量b=" + b);
	
	// 引入中间变量,交换两个变量a、b的值
	int t;
	t = b;
	b = a;
	a = t;
	System.out.println("交换后:变量a=" + a + ",变量b=" + b);
}

输出结果如下图所示:

不使用中间变量交换两个变量

最初看到“不使用中间变量交换两个变量”时,还是挺不解。很好奇不使用中间变量时,会怎么解决,最后看了实现方案,还是有点感叹方案的精巧的。有的方案采用简单的加减法运算达到交换的目的,有的方案则采用异或运算达到。

1. 采用加减法运算交换两个变量
// 采用Java语言相应实现
public static void main(String[] args) {
	int a = 11;
	int b = 22;
	System.out.println("交换前:变量a=" + a + ",变量b=" + b);
	
	// 不使用中间变量,使用加减法运算,交换两个变量a、b的值
	a = a + b;
	b = a - b; // b = (a + b) - b ==> b = a, 即a交换到了b
	a = a - b; // a = (a + b) - a ==> a = b, 即b交换到了a
	System.out.println("交换后:变量a=" + a + ",变量b=" + b);
}

输出结果如下图所示:

2. 采用异或运算交换两个变量
// 采用Java语言相应实现
public static void main(String[] args) {
	int a = 11;
	int b = 22;
	System.out.println("交换前:变量a=" + a + ",变量b=" + b);
	
	// 不使用中间变量,使用异或运算,交换两个变量a、b的值
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	System.out.println("交换后:变量a=" + a + ",变量b=" + b);
}

输出结果如下图所示:

参考资料

  1. 不使用任何中间变量如何将a、b的值进行交换
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值