两个变量交换的四种方法(Java) 七种方法(JS)
两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用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]; |
可以看到解构赋值语法让我们的交换变量值变得超级简单,这个解构赋值语法要是讲的话要讲很多不是今天的重点,以后会在再总结现在就不讲了
总结
本文提到了这么多交换变量值的方法,不知道还有没有其他办法,虽然它是一个无关紧要的问题,不过可以练一练我们的脑洞。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
两个变量交换的四种方法(Java) 七种方法(JS)的更多相关文章
- 两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...
- 两个变量交换数字 不用第三个变量的情况下 int a = 5,b = 6
今天可是涨见识额 记录一下 第一种方法: a=a+bb=a-ba=a-b 第二种: b= a+(a=b)*0 一句话搞定
- c# 交换两个变量
使用临时变量: 有人会问只使用两个变量交换,怎么办? 不实用临时变量: 第一种: a=a+b; b=a-b; a=a-b; 第二种: 异或:相同是0,不同是1 上面是整型的,那么字符串可以直接异或吗? ...
- ansible七种武器和json
ansible七种武器和json • 第一种武器 – ansible 命令,用于执 ...
- Java String.contains()方法(转载)
Java String.contains()方法 Java String.contains()方法用法实例教程, 返回true,当且仅当此字符串包含指定的char值序列 描述 java.lang.St ...
- 比较 Java 静态工厂方法与构造函数
1 什么是静态工厂方法 Java 静态工厂方法是在方法前加上 public static,让这个方法变为公开.静态的方法.该方法返回该类的一个实例,就好像一个工厂生产出一个产品.所以称之为静态工厂方法 ...
- 面试题-JavaScript交换两个变量的方法
在平时的业务开发或者面试过程中,经常会遇到交换两个变量这种问题,于是,个人总结以下几种交换变量的方法: 1.方案一 使用一个临时变量来交换 2.方案二 使用ES6解构赋值语法来交换 3.方案三利用数 ...
- JS变量和变量交换的三种方法
一.what 变量就是用来存储数据的容器 二.how 通过var 关键字定义一个变量 var n1; //定义变量 变量的赋值:通过赋值运算符“=” 给变量赋值. var n2=123; //定义变量 ...
- JavaScript中交换两个变量的值得三种做法(代码实现)
javascript在编程时经常会涉及到如何交换两个变量的值,例如常见的冒泡排序,快速排序等:下面我讲根据自己近期所学总结几种常见的交换两个变量值的方法: 方法一:借助第三方变量交换两个变量的值 va ...
随机推荐
- GPU/CUDA程序初体验 向量加法
现在主要的并行计算设备有两种发展趋势: (1)多核CPU. 双核,四核,八核,...,72核,...,可以使用OpenMP编译处理方案,就是指导编译器编译为多核并行执行. (2)多线程设备(GP)GP ...
- 13个可实现超棒数据可视化效果的Javascript框架
随着商业及其相关需求的发展,数据成为越来越重要的元素之一,为了更加直观和明显的展示商业潜在的趋势和内在的特性,我们需要使用图表和图形的方式来直观动态的展示数据内在秘密,在今天的这篇文章中我们推荐12款 ...
- 用于Web开发的8 个最好的跨平台编辑器
1) Best Cross Platform IDE - Brackets Brackets是一个在前端Web开发和设计人员中最流行的开放源码IDE/代码编辑器之一.它拥有一些实用工具能够将HTML ...
- CKEditor && CKFinder 配置
准备 ...
- google/protobuf/releases/tag/v3.4.0 下载
Protocol Buffers v3.4.0 Downloads 4.07 MB protobuf-cpp-3.4.0.tar.gz 5.02 MB protobuf-cpp-3.4.0.zip 4 ...
- 在不重装系统的情况下撤底删除oracle数据库及oralce的相关软件
先从控制面板删除oracle的相关应用及数据库, 删除系统变量 ORACLE_OEM_CLASSPATH=%JAVA_HOME%\lib\ext\access-bridge-64.jar;%JAVA_ ...
- javascript获取数组种最大值?
Array.prototype.max = function () { return Math.max.apply({}, this) } Array.prototype.min = function ...
- spring_restful_json_jdbc
使用Spring MVC +JDBC 实现输出Json数据和视图两种形式 最后面有源代码 从web.xml開始配置: 声明定义两个Servlet各自是输出视图和json <!-- 声明一个Ser ...
- ZH奶酪:【数据结构与算法】并查集基础
1.介绍 并查集是一种树型数据结构,用于处理一些不相交集合的合并问题. 并查集主要操作有: (1)合并两个不相交集合: (2)判断两个元素是否属于同一个集合: (3)路径压缩: 2.常用操作 用fat ...
- Windows 之 手机访问 PC 端本地部署的站点
测试网页在手机上的显示工具我们可以使用谷歌内核的浏览器,打开开发者工具(F12),在device那里选择设备,然后刷新来查看网页在手机上的显示效果. 但毕竟是模拟的,如果想要在真机上调试该怎么办呢. ...