0
点赞
收藏
分享

微信扫一扫

【第18天】给定两个变量 a 和 b,交换它们的值 | 三种解法


​​​​

学习指引

  • ​​序、专栏前言​​
  • ​​序、本章前言​​
  • ​​一、【例题1】​​
  • ​​1、题目描述​​
  • ​​2、解题思路​​
  • ​​3、模板代码​​
  • ​​1、临时变量法​​
  • ​​2、算术运算法​​
  • ​​3、异或交换法​​
  • ​​4、三种方法对比。​​
  • ​​三、推荐专栏​​
  • ​​四、课后习题​​

序、专栏前言

   本专栏开启,目的在于帮助大家更好的掌握学习​​Java​​​,特别是一些​​Java学习者​​​难以在网上找到系统地算法学习资料帮助自身入门算法
   但最最主要的还是需要独立思考,对于本专栏的所有内容,能够进行完全掌握,自己完完全全将代码写过一遍,对于算法入门肯定是没有问题的。
   算法的学习肯定不能缺少总结,这里我推荐大家可以到​高校算法社区​将学过的知识进行打卡,以此来进行巩固以及复习。
  学好算法的唯一途径那一定是题海战略,大量练习的堆积才能练就一身本领。专栏的任何题目我将会从【题目描述】【解题思路】【模板代码】【代码解析】等四板块进行讲解。

序、本章前言

  交换两个变量的值,这是一个再寻常不过的需求,但大部分人却仅仅只知道临时变量的交换方式,这也是大家常用的方法。但是在当今内卷的时代,这也能作为面试的考点了,不准你使用临时变量问你如何交换两个变量的值。今天我们也讲解最常用的三种方法。

一、【例题1】

1、题目描述

,请你交换两个变量的值,并打印它们的值。

2、解题思路

  在​​Java​​​中并没有现成的函数来对两个变量进行交换值。但想完成这个操作也十分容易。好比你有两杯水​​a​​​和​​b​​​,让你交换两个杯子的水。你会想到怎么办?肯定是再拿一个空杯子​​c​​​,先把​​a​​​倒进​​c​​​,再把​​b​​​倒进​​a​​​,最后​​c​​​倒​​b​​即可。最朴素的交换变量方法也是如此。

3、模板代码

1、临时变量法

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
int a=sc.nextInt();
int b=sc.nextInt();
int c=0;
c=a;
a=b;
b=c;
System.out.println(a+" "+b);
}
}
}

  • ​​​c=a​​​,把的值给
  • ​​​a=b​​​,把的值给了
  • ​​​b=c​​​,把的值给,而的值恰好就是最开始时的值。
  • 至此完成变量交换任务。

2、算术运算法

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
long a=sc.nextLong();
long b=sc.nextLong();
a=a+b;//(1)
b=a-b;//(2)
a=a-b;//(3)
System.out.println(a+" "+b);
}
}
}

  • 当​​​a=a+b​​​执行完成后,​​a​​​的值更新为​​a+b​​的和。
  • 当​​​b=a-b​​​执行后,​​b​​​的值变为​​a+b-b​​​,即最开始​​a​​的值。
  • 最后​​​a=a-b​​​执行后,​​a​​​的值变为​​a+b-a​​​,即最开始​​b​​的值。
  • 因为数据范围太大,​​​a+b​​​的操作可能会爆​​int​​​,所以我们需要使用​​long​​。
  • 至此完成变量交换任务。

3、异或交换法

  下面讲解最神奇的一种交换方法——异或交换法。​​^​​​符号是位运算中的一门运算。对于两个数的二进制,如果相同位不同则为​​1​​​,相同则​​0​​。所以异或运算有下面几条比较重要的性质:

  • 两个相同的数异或的结果为​​​0​​。
  • 任何一个数和​​​0​​异或的结果是它本身
  • 异或运算满足结合律和交换律
  • 当​​​a^b=c​​​时,同样有​​a^c=b​​​和​​b^c=a​​。

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
int a=sc.nextInt();
int b=sc.nextInt();
a=a^b;
b=a^b;
a=a^b;
System.out.println(a+" "+b);
}
}
}

  • 当​​​a^b​​​会得到一个结果​​c​​​,此时​​a​​​等于​​c​​。
  • 当​​​b=a^b​​​时,也就是​​b=c^b​​​,此时​​b​​​的值变为最开始的​​a​​。
  • 当​​​a=a^b​​​时,也就是​​a=a^c​​​,此时​​a​​​的值变为最开始的​​b​​。
  • 至此完成变量交换任务。
  • 【第18天】给定两个变量 a 和 b,交换它们的值 | 三种解法_算法_25

4、三种方法对比。

  方法1是我们平时最常用的,方法2有缺陷不推荐,方法3需要了解掌握,但平时并不太推荐使用,因为可读性不好,有的人并不明白这段代码是和作用。所以还是推荐使用方法1。

​​​​


课后习题

序号

题目链接

难度评级

1

​​ 交换数字​​

1


举报

相关推荐

0 条评论