Java基础中Int类型变量值互换的几种方法

    在很多时候,我们会使用到将两个整型变量值进行互换,比如冒泡排序,通过判断来将数组变量的值逐步交换,那么怎么交换值才能最有效最节省空间呢?

  首先,我们会想到的,用一个零时变量来做中间的过度存储空间,这是很容易想到的方法,实现如下:

      int i = 10;  //声明变量 i,并给 i 赋值为10

      int j = 20;  //声明变量 j,并给 j 赋值为20

      int temp;  //声明零时变量temp

      那么,我们要将变量 i 的值赋给变量 j ,就得通过零时变量temp存储其中一个变量的值:

      temp = i ;   //将变量 i 值暂存于零时变量temp中,即temp = 10;

      i = j ;    //将变量 j 的值赋值给变量 i ,即 i = 20;

      j = temp ;    //将零时变量存放的值赋值给变量 j ,即 j = 10;

      这样,我们就完成了最简单的值互换。

  其次,既然我们需要互换的是int类型的变量,那么就可以进行数值运算及加减乘除来实现变量值的互换。

          int i = 10;  //声明变量 i,并给 i 赋值为10

      int j = 20;  //声明变量 j,并给 j 赋值为20

      i = i + j;  //将 i + j(10+20) 的和赋值给变量 i ,赋值后变量 i 的值为 30

      j = i - j;  //将 i - j(30-20) 的差赋值给变量 j ,赋值后变量 j 的值为 10

      i = i - j;  //再运算一次,将 i - j(30 - 10)的差赋值给变量 i ,赋值后变量 i 的值为 20

      这样,我们也完成了两个变量值的互换,这样的好处是不需要第三个变量参与,节省了运行内存。

  最后,我们可以通过位运算中的异或运算(^)实现变量值的交换,异或运算是位运算,其规则是相同为0,不同为1,即1^0或0^1的取值为1,1^1或0^0的取值为0,实现如下:

         int i = 10;  //声明变量 i,并给 i 赋值为10

         int j = 20;  //声明变量 j,并给 j 赋值为20

      //其中变量 i 的值为10,其二进制编码为:0000 1010

      //其中变量 j 的值为20,其二进制编码为:0001 0100

      i = i ^ j ;  //即为 10 ^ 20 ,根据 ^ 的运算规则可知,其结果是 0001 1110 ,转换成十进制为:24 + 23 + 2+ 2 = 30 ,

            //并将30赋值给变量 i ,即 i = 30

      j = i ^ j ;  //即为 30 ^ 20,其结果是 0000 1010,转换成十进制为10,并将结果赋值给变量 j ,即 j = 10

      i = i ^ j ;  //即为 30 ^ 10,其结果是 0001 0100,转换成十进制为20,并将结果赋值给变量 i ,即 i = 20 

      这种方式不需要使用零时变量,且是通过位运算,增加了其运算速度。

  总结,在完成代码时,我们要在解决问题的同时思考更加高效率的解决方案,当然,我们也要明白不同方案的优点和缺点,虽然有些方案可以提高运行效率,比如上述的第三种方案,但是他没有第一种方案直观,并且效率也没有说完全高太多,只要在可接受的运行时间和空间内解决问题,那么我们完全可以使用第一种更为简单和直观的方式解决问题。 

原文地址:https://www.cnblogs.com/stupidxixi/p/9922031.html

时间: 2024-08-12 13:07:17

Java基础中Int类型变量值互换的几种方法的相关文章

【Java必修课】通过Value获取Map中的键值Key的四种方法

1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value值,求Key值. 本文将用实例介绍四种方法,通过传入Value值,获取得到Key值. 2 四种方法 2.1 循环法 循环法就是通过遍历Map里的Entry,一个个比较,把符合条件的找出来.会有三种情况: (1)找到一个值 (2)找到多个值 (3)找不到 具体代码如下: @Test public void lo

深入剖析Java编程中的中文问题及建议最优解决方法

摘录自:http://fafeng.blogbus.com/logs/3062998.html http://www.blogbus.com/fafeng-logs/3063006.html 深入剖析Java编程中的中文问题及建议最优解决方法 说明:本文为作者原创,作者联系地址为:[email protected].由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用 成员变量(属性)①类中添加成员变量 访问修饰符 类型 变量名 private String name ②实例化对象调用类的构造方法类构造对象,Teacher one = new Teacher(): 有static的可以直接调用,因为static是类级别的 ③JavaBean里边一般规则应该有公共的无参构造应该有符合命名规范的get/set方法 ④对象的回收:没有任何引用指向该对象时,GC会回收 主动回收:对象 = nu

在Java Web程序中使用监听器可以通过以下两种方法

之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响应,从本质上来说这些都是观察者模式的具体实现,在web程序中的监听器也不例外.在Java Web程序中使用监听器可以通过以下两种方法:通过注解@WebListener来标识一个自定义的监听器:[java] view plain copy@WebListener public class Custom

Java中取小数点后两位(四种方法)

摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧     java.text.DecimalFormat   df=new   java.text.DecimalFormat("#.##");     double   d=3.14159;     System.out.println(df.format(d)); 二 java.math.BigDecimal     B

(转载)Java中如何遍历Map对象的4种方法

在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用entries来遍历 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer,

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad

SpringMVC中controller返回json数据的两种方法

SpringMVC中controller返回json数据的两种方法 1.jsp的ajax请求: function getJson(){ $.ajax({ type:"get", dataType:"json", url:"<%=basePath %>getJson", success:function(data){ for(var i=0;i<jsonData.length;i++){ alert("Id:"

遍历Hashtable中的key和value的几种方法

遍历Hashtable中的key和value的几种方法 [java] view plaincopy package coreJava; import java.util.Enumeration; import java.util.Hashtable; import java.util.Iterator; /* * 处理原则:先取出key,再利用key获取value */ public class HashtableDemo { public static void main(String[] a