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

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

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 变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一篇文章带你入门java变量与类型

    目录 整型变量 基本语法格式 代码示例 长整型变量 基本语法格式 代码示例 双精度浮点型变量 基本语法格式 代码示例 单精度浮点型变量 基本语法格式 代码示例 字符类型变量 基本语法格式 代码示例 字节类型变量 基本语法格式 代码示例 短整型变量 基本语法格式 代码示例 布尔类型变量 基本语法格式 代码示例 简单/内置类型小结 字符串类型变量 基本语法格式 代码示例 转义字符 字符串拼接 变量作用域 变量的命名规则 常量 字面值常量 final 关键字修饰的常量 总结 整型变量 基本语法格式 i

  • Java未赋值变量的初始值解析(默认值)

    目录 Java未赋值变量的初始值(默认值) 初始值(默认值) 实例变量(非静态字段) 类变量(静态字段) 本地变量 参数 解决java未赋值变量的默认值问题 如下所示 Java未赋值变量的初始值(默认值) 初始值(默认值) 参考:官方文档 Java程序中,任何变量必须初始化后才能使用. 以下为不同数据类型的默认值. 数据类型 初始值 byte 0 short 0 int 0 long 0L char 'u0000' float 0.0f double 0 boolean false 所有引用类型

  • java中int、double、char等变量的取值范围详析

    目录 1.java工具 2.代码简单框架 3.int 4.long 5.double 6.float 7.char 8.byte 9.short 10.总结 1.java工具 1.JDK:Java开发者工具,建议安装1.8版的. 2.IEDA:集成开发环境 2.代码简单框架 public为访问修饰限定符 class为类 HelloWorld为类的名称 public static void main(String[] args)相当于C语言的的main函数 System.out.println()

  • Java基础知识之成员变量和局部变量浅显易懂总结

    目录 引言 java变量分类 JVM中的主要内存空间 三大变量内存分配情况 三区介绍 栈区 堆区 方法区 基本介绍 成员变量 局部变量 变量使用 总结 引言 成员变量和局部变量在每种编程语言中都有涉及,如果之前了解过其他语言的成员变量或者局部变量,那么在学习java中的成员变量和局部变量时可以看看有那些联系和不同,这一块的东西也不能说难,如果第一次接触可能会感觉有点乱,所以接下来我先把java中总结的成员变量和局部变量的部分内容先列出来,带着这些内容学起来会轻松很多! java变量分类 JVM中

  • java局部变量表的基础知识点及实例

    说明 1.局部变量表也叫局部变量数组或本地变量表.定义为一个数组,主要用于存储方法参数和定义方法中的局部变量.这些数据类型包括各种基本数据类型.对象参考和returnAddress类型. 2.因为局部变量表是建立在线程栈上的线程私有数据,所以没有数据安全问题. 实例 private static int count=0; public static void recursion(int a,int b,int c){ long l1=12; short sl=1; byte b1=1; Stri

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

    我们先看看使用第三变量的方法.(开胃菜) 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 } } 下面是运行结

  • Java中switch的三种用法方式

    Java中switch的三种用法详解: switch居然有三种方式 ? 作为一个接触java不久的人来说,这确实让我吃了一惊! 根据版本,在java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和选择,在代码上,更加的简便灵活, 让我们试试这神奇的switch吧! 使用switch这个关键词, 我们可以很好的解决if-else 中多重选择的尴尬场面! Java中switch的三种用法详解: switch 标准方式 switch - > 用法: switch

  • Java中mybatis的三种分页方式

    目录 前言 一.Limit分页 二.RowBounds分页(不推荐使用) 三.Mybatis_PageHelper分页插件 前言 分页是我们在开发中绕不过去的一个坎!当你的数据量大了的时候,一次性将所有数据查出来不现实,所以我们一般都是分页查询的,减轻服务端的压力,提升了速度和效率!也减轻了前端渲染的压力! 注意:由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用!

  • 基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

  • Python3之不使用第三方变量,实现交换两个变量的值

    method 1: a,b = b,a method 2: a = a+b b = a-b a = a-b 以上这篇Python3之不使用第三方变量,实现交换两个变量的值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • java中常用的字符串的比较方法(两种)

    比较字符串比较常用的两个方法是运算符"="和String的equals方法. 使用"="比较两个字符串,是比较两个对象的的"地址"是否一致,本质就是判断两个变量是否指向同一个对象,如果是则返回true,否则返回的是false.而String类的equals方法则是比较两个字符串的内容是否一致,返回值也是一个布尔类型. 看下面的代码: public class TestString{ public static void main(String[]

  • java中的FileInputStream三种read()函数用法

    目录 FileInputStream流的三种read()函数对比 1. int read( )函数 2. read( byte [ ] ) 3. read(byte[ ] ,int off ,int len) FileInputStream中的read()方法 总结 FileInputStream流的三种read()函数对比 首先我们先创建FileIputStream流对文件进行读取 public static void main(String[] args) throws IOExceptio

  • Java中获取时间戳的三种方式对比实现

    Java中获取时间戳 三种方式对比 最近项目开发过程中发现了项目中获取时间戳的业务.而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式. 1.System.currentTimeMillis() System类中的currentTimeMillis()方法是三种方式中效率最好的,运行时间最短.开发中如果设计到效率问题,推荐使用此种方式获取. System.currentTimeMillis() 2.new Date().getTime() 除了Sys

  • PHP不用第三变量交换2个变量的值的解决方法

    以前做过一道php面试题是这样的:不使用第三个变量实现交换两个变量的值.一般都是借助第三个中间变量来实现原来两个变量的值交换,但是这道题却要求不能使用中间变量,这对于初学者来说也算是一个难题了.网上找到的几种方法总结如下: 复制代码 代码如下: //字符串版本 结合使用substr,strlen两个方法实现$a="a";$b="b";echo '交换前 $a:'.$a.',$b:'.$b.'<br />';$a.=$b;$b=substr($a,0,(s

  • Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型.继承是面向对象的三个基本特征--封装.继承.多态的其中之一,我们在使用JAVA时编写的每一个类都是在继承,因为在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类.超类),如果

随机推荐