您的位置:首页 > 编程语言 > Java开发

实现两个变量的互换(不借助第三个变量)

2017-07-10 15:07 246 查看

一、问题简述

变量的互换常见于数组排序算法中,常见的做法是创建第三个变量进行互换,但是创建第三个变量仅作为过渡变量,这样不仅消耗系统内存,还使效率低下。这里提供一种不借助第三个变量的算法实现两个变量的互换。

二、代码实现

package net.csdn.exercises02;
import java.util.Scanner;
/*
* 不借助第三方变量实现两个变量的互换
*/
public class VariableExchange {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
byte num1 = sc.nextByte();
System.out.println("请输入第二个整数:");
byte num2 = sc.nextByte();
num1 = (byte)(num1 ^ num2);
num2 = (byte)(num2 ^ num1);
num1 = (byte)(num1 ^ num2);
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
sc.close();
}
}


三、结果分析

分析:

这里用的是byte类型的数据,是为了方便分析,int等其他的类型也适用。
假如num1输入的是4,num2输入的是6,那么num1的二进制值是00000100,num2的二进制值是00000110
第一步:

num1 = (byte)(num1 ^ num2);


此时num1 = 00000100 ^ 00000110 = 00000010,它就相当于num1 = 2。

第二步:

num2 = (byte)(num2 ^ num1);


此时等式右边num1 = 2,则此式子为:num2 = 00000110 ^ 00000010 = 00000100,它就相当于num2 = 4。

第三步:

num1 = (byte)(num1 ^ num2);


此时等式右边num1 = 2,num2 = 4,则此式子为:num1 = 00000010 ^ 00000100 = 00000110,它就相当于num1 =6。
这就完成了num1和num2的交换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法 排序算法