Java-不借助第三变量进行两数交换的两种常用方法

本文介绍两种不使用额外变量实现两数交换的方法:数值计算法和位运算法。数值计算法通过加减运算交换,位运算法利用异或运算特性。代码示例清晰展示交换过程。
不借助第三变量进行两数交换有两种方法:

数值计算法:

加数 + 加数 = 和
被减数(和) - 减数 = 差
被减数 (和)- 差 = 减数

位运算法:

任意一个数与任意一个给定的值连续异或两次,值不变
m = m ^ n ^ n;
n = n ^ m ^ m;

具体代码演示:

public class Demo {
	public static void main(String[] args) {
	    /**
	     * 引用第三变量 temp,完成 numa 与 numb 交换
	     */
        int numa = 4, numb = 5, temp;
        System.out.println("交换前:" + numa + " " + numb);
        temp = numa;
        numa = numb;
        numb = temp;
        System.out.println("交换后:"+ numa + " " + numb);
        
        /**
         * 不借助第三变量,进行两数交换
         *
         * 数值计算方法
         *
         * 加数 + 加数 = 和
         * 被减数(和) - 减数 = 差
         * 被减数 (和)- 差 = 减数
         */
        System.out.println("---数值运算法---");
        int num1 = 4, num2 = 5;
        System.out.println("交换前:" + num1 + " " + num2);
        // 加数 + 加数 = 和
        // 将2数相加,存储在num1中
        num1 = num1 + num2;
        // 被减数 - 减数 = 差
        // num1中存储值是2数的和,num1 - num2 得到的是原来 num1 的值, 此时num1还是2数之和
        num2 = num1 - num2;
        // 被减数 - 差 = 减数
        // num1中存储值是2数的和,num1 是2数之和,num2是原来num1 的值,num1 - num2 得到原来num2的值
        num1 = num1 - num2;
        System.out.println("交换后:"+ num1 + " " + num2);
       
        /**
         *
         * 位运算方法
         *
         * 任意一个数与任意一个给定的值连续异或两次,值不变
         * m = m ^ n ^ n;
         * n = n ^ m ^ m;
         *
         */
        System.out.println("---位运算法---");
        System.out.println("交换前:" + num1 + " " + num2);
        // 将num1和num2异或的结果放入num1中
        num1 = num1 ^ num2;
        // num2 = num1 ^ num2 ^ num2
        num2 = num1 ^ num2;
        // num1 = num1 ^ num2 ^ num1
        num1 = num1 ^ num2;
        System.out.println("交换后:"+ num1 + " " + num2);

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值