zoukankan      html  css  js  c++  java
  • 详解java交换两个整数变量的三种方法

    在进行开发时,往往需要对两个整数变量进行交换,可采用以下三种方法:

    1、借助临时变量;

       public static void swap1(int a,int b ){
            System.out.println("原始值:"+a+","+b);
            int temp =a ;
             a = b;
             b = temp;
            System.out.println("交换后:"+a+","+b);
        }

    此种方式比较好理解,在开发时可直接使用。但在面试中使用,似乎显得低端。

    2、借助“先加后减”操作,不生成临时变量。

    1 public static void swap3(){
    2         int a=Integer.MAX_VALUE;
    3         int b = Integer.MAX_VALUE-1;
    4         System.out.println("原始值:"+a+","+b);
    5         a =a+b;
    6         b= a-b;
    7         a =a-b;
    8         System.out.println("交换后:"+a+","+b);
    9     }

    使用此种方法时,注意加减的次序。

    另外一点,有人说在使用这种方法时需要注意数值越界的问题。为验证此问题,将a和b的值都是设为整型最大值,结果仍无误,此说法似乎有误。

    3、借助异或

     public static void swap2 (int a ,int b){
            System.out.println("原始值:"+a+","+b);
            a  = a^b;
            b = b^a;
            a = a^b;
            System.out.println("交换后:"+a+","+b);
        }

    其实现原理是进行异或操作的数学性质。如下

    1.任一变量X与其自身进行异或结果为0,即 X^X=0
    2.任一变量X与0进行异或结果不变,即 X^0=X
    3.异或运算具有可结合性,即 a^b^c = (a^b)^c = a^(b^c)
    4.异或运算具有可交换性,即 a^b = b^a。

    在异或性质的基础之前进行操作,实现交换的执行过程为:

     a = a ^ b   ==>   a = a ^ b;//获得异或值,赋值给a
     b = a ^ b   ==>   (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a,//将上一步异或后的a带入,获得b
     a=  a ^ b   ==>   (a ^ b) ^ b =  (a ^ b) ^ a = a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b, 该值赋值给a,即 a = b

  • 相关阅读:
    Windows 7任务栏图标特别说明
    Linux下send函数 Broken pipe错误的解决方法
    C++实现一个简单的异常日志记录类
    C++写日志操作
    VC中设置打开文件的权限为管理员权限
    MFC 注册热键
    监控Tomcat状态及配置AIO(APR)模式
    Tomcat管理功能使用及WEB站点部署
    Tomcat多实例配置
    基于端口主机的虚拟主机
  • 原文地址:https://www.cnblogs.com/guojuboke/p/10369200.html
Copyright © 2011-2022 走看看