两个变量交换的四种方法(Java) 七种方法(JS)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下。

1.利用第三个变量交换数值,简单的方法。

(代码演示一下)

 1 class TestEV
 2 //创建一个类
 3 {
 4     public static void main(String[]args)
 5     {
 6         int x =5,y=10; //定义两个变量
 7          
 8         int temp = x;    //定义第三临时变量temp并提取x值
 9         x = y;        //把y的值赋给x
10         y = temp;      //然后把临时变量temp值赋给y
11
12         System.out.println("x="+x+"y="+y);
13
14     }
15
16 }
17         

  2.可以用两个数求和然后相减的方式进行数据交换,弊端在于如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。

(代码演示一下)

 1 class TestEV
 2 //创建一个类
 3 {
 4     public static void main(String[]args)
 5     {
 6         int x =5,y=10; //定义两个变量
 7
 8         x = x + y;        //x(15) = 5 + 10;
 9         y = x - y;        //y(5) = x(15) - 10;
10         x = x - y;        //x(10) = x(15) - y(5)
11         System.out.println("x="+x+"y="+y);
12
13     }
14
15 }             

3.利用位运算的方式进行数据的交换,利用的思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围

(代码演示一下)

 1 class TestEV
 2 //创建一个类
 3 {
 4     public static void main(String[]args)
 5     {
 6         int x =5,y=10; //定义两个变量
 7
 8                 x = x^y;
 9         y = x^y;  //y=(x^y)^y
10         x = x^y;  //x=(x^y)^x
11         System.out.println("x="+x+"y="+y);
12
13     }
14
15 }                   

  

4.最为简单的,在打印输出的时候直接交换变量

(代码演示一下)

 1 class TestEV
 2 //创建一个类
 3 {
 4     public static void main(String[]args)
 5     {
 6         int x =5,y=10; //定义两个变量
 7
 8         System.out.println("x="+y+"y="+x); //直接在输出的时候交换
 9
10     }
11
12 }      

前言

这篇文章总结了七种办法来交换a和b的变量值

?


1

2

var a = 123;

var b = 456;

交换变量值方案一

最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了

?


1

2

3

4

var t;

t = a;

a = b;

b = t;

首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基本的了

交换变量值方案二

下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值,这样可以先改变另一个变量值, 最后改变原修改的变量值

比如这个

?


1

2

3

a += b;

b = a - b;

a -= b;

让a先变成a与b的‘和‘(也可以换成a和b的差,一样的) ,‘和‘减去b巧妙的得到了a的变量值赋予b ,再通过‘和‘减去a的值得到了b的值赋予a,或者是下面的变式(差的形式)

?


1

2

3

a -= b;

b = a + b;

a = b - a;

但是感觉和的形式更容易理解

交换变量值方案三

这种方法对于第一次学习JavaScript的同学来说可能不了解,因为我们JavaScript很少会用到位操作,这是我在以前看算法竞赛书的时候学来的,通过底层位运算来进行交换变量值,也是上面的方案演化来的

?


1

2

3

a ^= b;

b ^= a;

a ^= b;

了解一下吧,C++甚至可以a^=b^=a^=b来完成任务,但我发现JavaScript不可以

不过我们可以这样

?


1

a = (b^=a^=b)^a;

交换变量值方案四

把a先变成了一个对象,这个对象保存着应该交换后的键值对,最后赋值搞定

?


1

2

3

a = {a:b,b:a};

b = a.b;

a = a.a;

交换变量值方案五

和上面的方法很像,只不过对象换成了数组

?


1

2

3

a = [a,b];

b = a[0];

a = a[1];

交换变量值方案六

这个办法十分的巧妙,不是我想出来的,想出来的人一定是大神,除非他是托梦想出来的,简单粗暴一行代码交换了a和b的变量值

?


1

a = [b,b=a][0];

根据运算符优先级,首先执行b=a,此时的b直接得到了a的变量值,然后一步数组索引让a得到了b的值(简直不能再厉害)

交换变量值方案七

最后我的方案是利用了ES6的解构赋值语法,它允许我们提取数组和对象的值,对变量进行赋值,不过我现在测试用的chrome浏览器已经实现了

?


1

[a,b] = [b,a];

可以看到解构赋值语法让我们的交换变量值变得超级简单,这个解构赋值语法要是讲的话要讲很多不是今天的重点,以后会在再总结现在就不讲了

总结

本文提到了这么多交换变量值的方法,不知道还有没有其他办法,虽然它是一个无关紧要的问题,不过可以练一练我们的脑洞。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

时间: 2024-11-06 18:38:58

两个变量交换的四种方法(Java) 七种方法(JS)的相关文章

两个变量交换的四种方法

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. class TestEV //创建一个类 { public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x="+x

两个变量交换的四种方法(Java)

对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV//创建一个类{ public static void main(String[]args) { int x =5,y=10; //定义两个变量 int temp = x; //定义第三临时变量temp并提取x值 x = y; //把y的值赋给x y = temp; //然后把临时变量temp值赋给y System.out.println("x=&

将两个变量中的值进行互换的几种方法

 在做软件开发的过程中,经常需要将两个变量中的数值进行互换.我们可以使用的互换方法有三种. 第一种方法: int a = 3, b = 4;int tmp; tmp = a;a = b;b = tmp;   这种做法,是我们经常用到的做法,就是通过借助第三变量.             优点是:可读性强.             缺点是:引入第三方变量,占用内存大. 第二种方法: int a = 3, b = 4; a = a + b ; // a = 7;   原理是利用两个数的和  a +

不借助第三个变量实现两个变量交换的思考

1) 算术运算简单来说,就是通过+和-运算来实现.代码如下: int a,b; a=10;b=12; a=b-a;   //a=2;b=12 b=b-a;   //a=2;b=10 a=b+a;   //a=12;b=10 通过以上运算,a和b中的值就进行了交换.表面上看起来很简单,但是不容易想到,尤其是在习惯标准算法之后. 此算法与标准算法相比,多了三个计算的过程,但是没有借助临时变量.(以下称为算术算法) 2) 指针操作对指针的操作实际上进行的是整数运算.比如:两个int指针相减得到一个整数

不借助第三个变量实现两个变量交换及原理分析

通常的交换两个变量a,b的过程为 var temp; temp=a; a=b; b=temp; 需借助上面的第3个临时变量temp. 无需借助第3个临时变量交换两个变量a,b d的方法: 逻辑运算(异或) 下面的异或运算可以实现a,b的交换,而无需借助第3个临时变量: a = a ^ b; b = a ^ b; a = a ^ b; 这个交换两个变量而无需借助第3个临时变量过程,其实现主要是基于异或运算的如下性质: 1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0 2.任意一个变量

java并发相关(四)—— 线程的七种状态

我们知道线程一共有七种状态,之间转换如下图: 锁池与等待池 原文地址:https://www.cnblogs.com/fbw-gxy/p/11689566.html

如何不运用第三方变量实现两个数的交换

当遇到交换两个变量的时候,我们通常使用的是借助第三方变量实现两个数的交换.那么如果不使用第三方变量时,该怎么操作呢. 下面有两种方法: 1.通过已有的两个变量之间的加或减实现: 这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用. 2.通过异或实现(异或符号为^) ******************************************************************************************************

(5)java基础知识-方法、关键字、命名规则、注释

一.方法 方法相当于功能的实现. public   static   int          max    (int num1, int num2)   {....................} 修饰符     返回类型   方法名   方法(参数可以有N个) 方法体 修饰符: 修饰符是可选的,告诉编译器如何调用该方法.这定义了该方法的访问类型. static: 类方法,可通过类名直接调用 返回类型:方法可以返回一个值.returnValueType的值是方法返回的数据类型.有些方法没有返

四种变量交换swap方法

1.void swap(int &x, int &y){ int temp=x; x=y; y=temp; } 2.void swap(int &x, int &y){ x=x+y; y=x-y; x=x-y; } 3.void swap(int &x, int &y){ x=x-y; y=x+y; x=y-x; } 4.void swap(int &x, int &y){ x=x^y; y=x^y; x=x^y; } 四种变量交换swap方