广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >有哪些实现两个数互换的方法
  • 192
分享到

有哪些实现两个数互换的方法

2024-04-02 19:04:59 192人浏览 八月长安
摘要

本篇内容主要讲解“有哪些实现两个数互换的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些实现两个数互换的方法”吧!基本数据类型借助第三个变量packag

本篇内容主要讲解“有哪些实现两个数互换的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些实现两个数互换的方法”吧!

基本数据类型

借助第三个变量

package 贪心;  import java.util.Random;  public class Exchange1 {     public static void main(String[] args) {                  Random random = new Random(47);         int a = random.nextInt(101);         int b = random.nextInt(101);         System.out.println("交换前:a = " + a + ", b = " + b);                   int t = a; // t == a         a = b;     // a == b         b = t;     // b == t == a         System.out.println("交换后:a = " + a + ", b = " + b);     } }

控制台输出如下:

有哪些实现两个数互换的方法

如果有不明白的朋友,可以自己准备三个杯子,一个空杯代表变量t,两个杯子装上水分别代表变量a、b,然后互换一下a、b两个杯子里的水即可明白。

不借助第三个变量

package 贪心;  import java.util.Random;  public class Exchange2 {     public static void main(String[] args) {                  Random random = new Random(48);         int a = random.nextInt(101);         int b = random.nextInt(101);         System.out.println("交换前:a = " + a + ", b = " + b);          a = a + b; // a == a + b         b = a - b; // b == a + b - b == a, 此时b == a         a = a - b; // a == a + b - a == b, 此时a == b         System.out.println("交换后:a = " + a + ", b = " + b);     } }

控制台输出如下:

有哪些实现两个数互换的方法

通过乘除操作实现两个数互换

package 贪心;  import java.util.Random;  public class Exchange3 {     public static void main(String[] args) {                  Random random = new Random(50);         int a = random.nextInt(101);         int b = random.nextInt(101);         System.out.println("交换前:a = " + a + ", b = " + b);          a = a * b; // 此时a == a * b         b = a / b; // b == a * b / b == a, 此时b == a         a = a / b; // a == a * b / a == b, 此时a == b         System.out.println("交换后:a = " + a + ", b = " + b);     } }

Output:

有哪些实现两个数互换的方法

利用赋值运算符

因为这两种方法是笔者后面补充的,所以第七种和第八种方法放在前面

利用赋值和加减来实现两个数互换

package 贪心;  public class Exchange7 {     public static void main(String[] args) {                   int a = (int) (Math.random() * 101);         int b = (int) (Math.random() * 101);         System.out.println("交换前: a = " + a + ", b = " + b);          a = b + a - (b = a); // a == b + a - a == b, a == b         System.out.println("交换后: a = " + a + ", b = " + b);     } }

控制台输出如下:

有哪些实现两个数互换的方法

利用赋值和加乘来实现两个数互换

package 贪心;  public class Exchange8 {     public static void main(String[] args) {                   int a = (int) (Math.random() * 101);         int b = (int) (Math.random() * 101);         System.out.println("交换前: a = " + a + ", b = " + b);          a = b + (b = a) * 0; // a == b + a * 0 == b, a == b         System.out.println("交换后: a = " + a + ", b = " + b);     } }

控制台输出如下:

有哪些实现两个数互换的方法

异或

在介绍第四种方法之前,首先要跟大家介绍一下Java中的"异或"操作符(^)。

异或操作符是Java中按位操作符的一种,那么什么是按位操作符呢?

按位操作符用来操作整数基本数据类型中的单个"比特"(bit),即二进制位。我们都知道,计算机中是采用二进制计数,而不是十进制计数。也就是说,计算机中没有我们所谓的2、3、4、5 … 100 … 1000 … ,计算机中有的只是0和1,逢二便进一。而按位操作符会对两个参数中对应的位,也就是对用二进制表示的两个参数相对应的0或1,执行布尔代数运算,并最终生成一个结果。

当然在Java中我们一般运用按位操作符很少,而我们最开始接触按位操作符,很可能是从C语言或者数字逻辑与电路。事实上,按位操作符来源于C语言面向底层的操作,这种操作经常需要直接操纵硬件,设置硬件寄存器内的二进制位。而Java的设计初衷是嵌入电视机机顶盒内,所以这种面向底层的操作被保留了下来。Java技术的三大版本之一:JavaME,Java平台微型版正是用作嵌入式开发,用来开发数字机顶盒、可视电话等电子设备。

了解了按位操作符的概念,那么接下来,我们来了解"异或"操作

如a ^ b,若a、b两个值不同,则异或结果为1;若a、b两个数相同,则异或结果为0。

大家如果要记忆的话,可以记住六字真言:同为0,异为1。

或者明白或运算的朋友也可以通过字面意思来理解,若两数相异(要么是0和1,要么是1和0),则执行或运算;若两数相同(同为0,或同为1),则结果为0。

如果还是有点抽象的话,没得事,直接上代码:

package 贪心;  public class Test {     public static void main(String[] args) {                  System.out.println("3的二进制:" + Integer.toBinaryString(3));         System.out.println("4的二进制:" + Integer.toBinaryString(4));         System.out.println("3 ^ 3 的二进制:" + Integer.toBinaryString(3 ^ 3));          System.out.print("3 ^ 0 的二进制:" + Integer.toBinaryString(3 ^ 0));         if (3 == (3 ^ 0))             System.out.println(",也就是十进制的3");          System.out.print("4 ^ 3 ^ 3 的二进制:" + Integer.toBinaryString(4 ^ 3 ^ 3));         if (4 == (4 ^ 3 ^ 3))             System.out.println(",也就是十进制的4");     } }

Output:

有哪些实现两个数互换的方法

好戏开场,通过异或操作实现两个数互换

package 贪心;  import java.util.Random;  public class Exchange4 {     public static void main(String[] args) {                  Random random = new Random(51);         int a = random.nextInt(101);         int b = random.nextInt(101);         System.out.println("交换前:a = " + a + ", b = " + b);          a = a ^ b; // 此时, a == a ^ b         b = a ^ b; // b == a ^ b ^ b == a, 此时b == a         a = a ^ b; // a == a ^ b ^ a == b, 此时a == b         System.out.println("交换后:a = " + a + ", b = " + b);     } }

Output:

有哪些实现两个数互换的方法

引用数据类型

想必大家已经学了四种方法,已经对两个数互换信心满满,那么接下来,我们来看一道面试题

package 贪心;  public class Exchange5 {     public static void main(String[] args) {         Integer a = 10;         Integer b = 20;          swop(a, b);         // 打印结果:a = 20, b = 10         System.out.println("a = " + a + ", b = " + b);     }      private static void swop(Integer a, Integer b) {         // 完成此处代码     } }

如代码所示,完成指定位置的代码,使得程序最后的运行结果为:a = 20, b = 10

你可能觉得这还不简单,然后"刷刷刷"完成可能如以下的代码:

private static void swop(Integer a, Integer b) {         a = a ^ b;         b = a ^ b;         a = a ^ b;     }

然后再看输出结果就傻眼了:

有哪些实现两个数互换的方法

纳尼,不变?这是为什么?想知道为什么的可能需要自行了解一下Java内存模型了,毕竟Java里面没有C语言的指针(小声bb)。当然,本博主以后可能也会出这方面的博客。

下面让我来揭晓正确答案吧!

 private static void swop(Integer a, Integer b) throws NoSuchFieldException, IllegalAccessException {         // 完成此处代码 //        a = a ^ b; //        b = a ^ b; //        a = a ^ b;          int x = a;         int y = b;          // 运用反射来操作Integer         Class c = Integer.class;         Field field = c.getDeclaredField("value");         // 授权访问私有         field.setAccessible(true);         // 将 a、b的值分别设置为y、x的值         field.setInt(a, y);         field.setInt(b, x);       }

当当当当,控制台输出如下:

有哪些实现两个数互换的方法

至于如果有朋友想了解反射的知识,可以关注我的博客哦!毕竟反射是我当年学习JavaSE知识觉得最神奇也最喜欢的三个知识之一。

至于第六种方法嘛:

private static void swop(Integer a, Integer b) {        System.out.println("a = " + b + ", b = " + a);        // 终止Java虚拟机的运作        System.exit(0);    }

到此,相信大家对“有哪些实现两个数互换的方法”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 有哪些实现两个数互换的方法

本文链接: https://www.lsjlt.com/news/84615.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 有哪些实现两个数互换的方法
    本篇内容主要讲解“有哪些实现两个数互换的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“有哪些实现两个数互换的方法”吧!基本数据类型借助第三个变量packag...
    99+
    2022-10-19
  • PHP实现交换两个整型变量的方法有哪些
    这篇文章主要介绍“PHP实现交换两个整型变量的方法有哪些”,在日常操作中,相信很多人在PHP实现交换两个整型变量的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP实现交换两个整型变量的方法有哪些...
    99+
    2023-06-25
  • 两数相加的实现方法有哪些
    这篇文章主要介绍“两数相加的实现方法有哪些”,在日常操作中,相信很多人在两数相加的实现方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”两数相加的实现方法有哪些”的疑惑...
    99+
    2022-10-19
  • perl比较两个数组的方法有哪些
    在Perl中,可以使用不同的方法来比较两个数组。以下是一些常见的方法:1. 使用循环:可以使用循环来逐个比较两个数组中的元素。可以使...
    99+
    2023-09-26
    perl
  • c语言实现两个值互相交换的函数
    c语言中实现两个值互换的函数。 1、 #include <stdio.h> void swap(int n1, int n2) { int tmp; ...
    99+
    2022-11-12
  • php两个字符串互换的方法是什么
    在PHP中,两个字符串互换的方法可以使用以下几种方式:1. 使用临时变量进行交换:```php$a = "Hello";$b = "...
    99+
    2023-09-05
    php
  • Android编程实现两个Activity相互切换而不使用onCreate()的方法
    本文实例讲述了Android编程实现两个Activity相互切换而不使用onCreate()的方法。分享给大家供大家参考,具体如下: 这里要实现的目的是: 有3个Activit...
    99+
    2022-06-06
    方法 activity Android
  • php怎么实现两个变量值的互换
    在PHP中,可以使用一个额外的变量来存储其中一个变量的值,然后再将其赋值给另一个变量,从而实现两个变量值的互换。以下是一个示例代码:...
    99+
    2023-08-19
    php
  • 压缩两个集合的方法有哪些
    这篇文章主要介绍“压缩两个集合的方法有哪些”,在日常操作中,相信很多人在压缩两个集合的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”压缩两个集合的方法有哪些”的疑惑...
    99+
    2022-10-19
  • JavaScript判断两个数组相等的方法有哪些
    这篇文章主要介绍“JavaScript判断两个数组相等的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript判断两个数组相等的方法有哪些”文章能帮助大家解决问题。循环比较使用...
    99+
    2023-07-05
  • 对变量赋值的理解--Pyton中让两个值互换的实现方法
    #Pyton中让两个值互换的实现方法 #方法一:可以理解为相当于是同时赋值 a = 5 b = 4 a,b = b,a print(a,b) #方法二:可以理解为拿箱子过程 c = 10 d = ...
    99+
    2022-06-04
    赋值 变量 两个
  • c语言如何实现两个值互相交换的函数
    小编给大家分享一下c语言如何实现两个值互相交换的函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c语言中实现两个值互换的函数。#include <...
    99+
    2023-06-15
  • es6合并两个对象的方法有哪些
    ES6合并两个对象的方法有以下几种: Object.assign()方法: 该方法将一个或多个源对象的属性复制到目标对象,并返回...
    99+
    2023-10-25
    es6
  • Java不使用第三方变量交换两个变量值的方法有哪些
    本篇内容介绍了“Java不使用第三方变量交换两个变量值的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题:请说出几种不使用第三方...
    99+
    2023-06-22
  • javascript数值转换的方法有哪些
    今天小编给大家分享一下javascript数值转换的方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JavaScri...
    99+
    2023-07-06
  • JavaScript实现树结构转换的方法有哪些
    本文小编为大家详细介绍“JavaScript实现树结构转换的方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript实现树结构转换的方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在...
    99+
    2023-07-05
  • C语言用fun函数实现两个数的交换方式
    目录用fun函数实现两个数的交换函数交换两个数,常见错误总结用fun函数实现两个数的交换 #include <stdio.h> void fun(int *x,int ...
    99+
    2022-12-08
    C语言fun函数 C语言两个数交换 C语言fun
  • python保留两位小数的方法有哪些
    这篇文章主要讲解了“python保留两位小数的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python保留两位小数的方法有哪些”吧!方法:1、用字符串格式化,语法“print(&...
    99+
    2023-07-04
  • golang有哪些数据转换方法
    golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。详细介绍:1、类型转换操作符,Go语言提...
    99+
    2023-12-22
    Golang 数据转换
  • 如何使用php代码实现两个变量值的互换
    可以使用一个临时变量来实现两个变量值的互换。具体步骤如下:1. 定义两个变量并赋予初始值。2. 创建一个临时变量,并将其中一个变量的...
    99+
    2023-09-04
    php
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作