Java中不用第三个变量来互换两个变量的值

 更新时间:2021年10月18日 10:53:57   作者:小年糕糕  
在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值

我们先看看使用第三变量的方法。(开胃菜)

class Swap{
    public static void main(String[] args){
        int a = 3;
        int b = 5;

        int c; 
        c = a; //把a的值先存到c
        a = b; //把b存给a
        b = c; //把存在c的值倒赋给b

        System.out.println("a="+a); //a==5
        System.out.println("b="+b); //b==3
    }
}

下面是运行结果。

在这里插入图片描述

在这个方法中,我们引用了第三变量c,用c来辅助a与b的交换。

下面才是这次的正餐。

我们将介绍两种方法,准备好了吗?

(1)运用加法的性质来实现两个数的互换
那么我们先来展示代码

import java.util.Scanner;
class VariableExchange{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);          //创建扫描器
        System.out.println("请输入变量a的值");
        long a = scan.nextLong();                       //接收第1个变量值
        System.out.println("请输入变量b的值");
        long b = scan.nextLong();                       //接收第2个变量值
        System.out.println("a=" + a + "\tb=" + b );
        System.out.println("执行变量互换...");
        a = a + b; 
		b = a - b;
		a = a - b;
        System.out.println("a=" + a + "\tb=" + b );
    }
}

在这里插入图片描述

这种方法还是比较容易想到的,只是用到了加法规律,用坐标轴做辅助,还是很容易理解的。
这种方法在求和时,如果两个数的和超过了使用的数据范围,答案会出现错误。

用两个数相乘也可以实现两个数的互换,原理基本相同,在这里也就不再赘述。

(2)运用异或运算实现两个数的互换(硬菜)

首先我们需要知道,在异或运算时,会先将我们输入的数字转化成二进制,然后进行同位判断。
若同为0或同为1,则该位运算结果为 0
若一个为0,另一个为1,则该位运算结果为 1
换成一句人话:同位上相同为0,不同为 1
清楚了这个运算规律,那么我们来展示代码:

import java.util.Scanner;
class VariableExchange{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);          //创建扫描器
        System.out.println("请输入变量a的值");
        long a = scan.nextLong();                       //接收第1个变量值
        System.out.println("请输入变量b的值");
        long b = scan.nextLong();                       //接收第2个变量值
        System.out.println("a=" + a + "\tb=" + b );
        System.out.println("执行变量互换...");
        a = a ^ b;                                      //执行变量互换
        b = b ^ a;                                      //执行变量互换
        a = a ^ b;                                      //执行变量互换
        System.out.println("a=" + a + "\tb=" + b );
    }
}

在这里插入图片描述

如上,我们通过异或运算实现了不通过第三方变量交换两个数的值。

原理:在异或运算中,一个数异或另一个数(数值相等)两次,结果等于他的初始值

我们再用实例具体演示一遍

请添加图片描述

在这里我们定义a和b用来表示需要互换的两个数

我们运用性质: 一个数异或另一个数(数值相等)两次,结果等于他的初始值

在上图中第二步运算就行当于 a ^ b ^ b ,这个数值为17,我们把他赋值给了b
同理 第三步运算就相当于 b ^ a ^ a ^ b ^ b,这个数值为29,我们把他赋值给了a
这样我们就实现了 a 和 b 互换。

到此这篇关于Java中不用第三个变量来互换两个变量的值的文章就介绍到这了,更多相关Java 变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot执行延时任务之DelayQueue的使用详解

    springboot执行延时任务之DelayQueue的使用详解

    DelayQueue是一个无界阻塞队列,只有在延迟期满时,才能从中提取元素。这篇文章主要介绍了springboot执行延时任务-DelayQueue的使用,需要的朋友可以参考下
    2019-12-12
  • 如何解决SpringMVC不能访问html页面

    如何解决SpringMVC不能访问html页面

    这篇文章主要介绍了如何解决SpringMVC不能访问html页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • maven-surefire-plugin总结示例详解

    maven-surefire-plugin总结示例详解

    这篇文章主要介绍了maven-surefire-plugin总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 深入浅析jcmd:JDK14中的调试神器

    深入浅析jcmd:JDK14中的调试神器

    这篇文章主要介绍了jcmd:JDK14中的调试神器,本文给大家提到了jcmd的语法,通过实例列举的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • 彻底搞懂Java多线程(三)

    彻底搞懂Java多线程(三)

    这篇文章主要给大家介绍了关于Java面试题之多线程和高并发的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-07-07
  • Java8新特性:函数式编程

    Java8新特性:函数式编程

    Java8最新引入函数式编程概念,该项技术可以大大提升编码效率,本文会对涉及的对象等进行两种方法的对比,对新技术更直白的看到变化,更方便学习
    2021-06-06
  • Java基于Javafaker生成测试数据

    Java基于Javafaker生成测试数据

    这篇文章主要介绍了Java基于Javafaker生成测试数据的方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • 详解IDEA JUnit5测试套件运行错误的问题

    详解IDEA JUnit5测试套件运行错误的问题

    这篇文章主要介绍了详解IDEA JUnit5测试套件运行错误的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Mybatis-plus 代码生成器 AutoGenerator 的简介和使用详解

    Mybatis-plus 代码生成器 AutoGenerator 的简介和使用详解

    AutoGenerator是MyBatis-Plus的代码生成器,通过AutoGenerator可以快速生成 Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,极大的提升了开发效率,这篇文章主要介绍了Mybatis-plus代码生成器AutoGenerator的简介和使用,需要的朋友可以参考下
    2023-05-05
  • Java 创建PDF打印小册子案例

    Java 创建PDF打印小册子案例

    这篇文章主要给大家分享Java 创建PDF打印小册子案例,PDF打印小册子是指将PDF格式文档在打印成刊物前需要提前进行的页面排版,以便在打印后装订成册,下面文章内容我们将下面以Java代码展示如何来实现,需要的朋友可以参考一下
    2021-10-10

最新评论