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

    package com.zby.bubble;
    
    /**
     * <class description> 三种方法交换两个整数的值
     * 
     * @author zby
     *
     */
    public class Exchange {
    
        public static void main(String[] args) {
            splitLine();
            exchange1(Integer.MAX_VALUE, Integer.MAX_VALUE - 1);
            exchange1(99, 100);
            exchange1(Integer.MIN_VALUE, Integer.MIN_VALUE + 1);
            splitLine();
            exchange2(Integer.MAX_VALUE, Integer.MAX_VALUE - 1);
            exchange2(99, 100);
            exchange2(Integer.MIN_VALUE, Integer.MIN_VALUE + 1);
            splitLine();
            exchange3(Integer.MAX_VALUE, Integer.MAX_VALUE - 1);
            exchange3(99, 100);
            exchange3(Integer.MIN_VALUE, Integer.MIN_VALUE + 1);
            splitLine();
        }
    
        /**
         * <method description>使用一个临时变量交换,优点:对于其他类型同样适用。
         * 
         * @param a
         * @param b
         */
        public static void exchange1(int a, int b) {
            System.out.println("使用临时变量法进行交换,引入第三方变量");
            System.out.println("交换之前:a=" + a + ",b=" + b);
            int temp = a;
            a = b;
            b = temp;
            System.out.println("交换之后:a=" + a + ",b=" + b);
        }
    
        /**
         * <method description>重点:一个整数异或另一个整数两次,得到的还是这个原来的数。优点:不引入临时变量;缺点:只能对整数使用。
         * 
         * @param a
         * @param b
         */
        public static void exchange2(int a, int b) {
            System.out.println("使用异或法进行交换,不引入第三方变量");
            System.out.println("交换之前:a=" + a + ",b=" + b);
            a ^= b;
            b ^= a;
            a ^= b;
            System.out.println("交换之后:a=" + a + ",b=" + b);
        }
    
        /**
         * <method description>注意:加减法交换可能导致溢出,但是,没影响!!!!!溢出去又溢回来,结果是对的,是可以放心用的!!!!!之前进入误区以为溢出会有什么问题,然而并没有。
         * 
         * @param a
         * @param b
         */
        public static void exchange3(int a, int b) {
            System.out.println("使用加减法进行交换,不引入第三方变量");
            System.out.println("交换之前:a=" + a + ",b=" + b);
            a += b;
            b = a - b;
            a -= b;
            System.out.println("交换之后:a=" + a + ",b=" + b);
        }
    
        public static void splitLine() {
            System.out.println("----------华丽丽的分割线----------");
        }
    }
    ----------华丽丽的分割线----------
    使用临时变量法进行交换,引入第三方变量
    交换之前:a=2147483647,b=2147483646
    交换之后:a=2147483646,b=2147483647
    使用临时变量法进行交换,引入第三方变量
    交换之前:a=99,b=100
    交换之后:a=100,b=99
    使用临时变量法进行交换,引入第三方变量
    交换之前:a=-2147483648,b=-2147483647
    交换之后:a=-2147483647,b=-2147483648
    ----------华丽丽的分割线----------
    使用异或法进行交换,不引入第三方变量
    交换之前:a=2147483647,b=2147483646
    交换之后:a=2147483646,b=2147483647
    使用异或法进行交换,不引入第三方变量
    交换之前:a=99,b=100
    交换之后:a=100,b=99
    使用异或法进行交换,不引入第三方变量
    交换之前:a=-2147483648,b=-2147483647
    交换之后:a=-2147483647,b=-2147483648
    ----------华丽丽的分割线----------
    使用加减法进行交换,不引入第三方变量
    交换之前:a=2147483647,b=2147483646
    交换之后:a=2147483646,b=2147483647
    使用加减法进行交换,不引入第三方变量
    交换之前:a=99,b=100
    交换之后:a=100,b=99
    使用加减法进行交换,不引入第三方变量
    交换之前:a=-2147483648,b=-2147483647
    交换之后:a=-2147483647,b=-2147483648
    ----------华丽丽的分割线----------
  • 相关阅读:
    关于word开发中字体大小
    WPF学习笔记
    C#各种配置文件使用,操作方法总结
    web.config和app.config使用
    微软 WordXML格式初步分析
    面向对象—C#高级编程(第10版)学习笔记8
    C#编程的推荐规则和约定—C#高级编程(第10版)学习笔记7
    C#基础—C#高级编程(第10版)学习笔记6
    .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
    通俗易懂说编程:.Net Core是什么、有何用?
  • 原文地址:https://www.cnblogs.com/zby9527/p/7472766.html
Copyright © 2011-2022 走看看