zoukankan      html  css  js  c++  java
  • 有关Java中两个整数的交换问题

      在程序开发的过程,要交换两个变量的内容,是一种比较常见的事情。在排序算法中,就有一种就叫做“交换排序法”。在所有的排序算法,交换要排序的集合中的两个元素,几乎是必须的过程。在Java中交换两个元素的内容,如果你是程序员新手,你可能碰到意想不到的问题。

    众所周知,java和C、C++中都不能通过值传递的方式实现两个整数的交换。

    即下面的函数是不能成功交换两个整数的,

    public void swap1(int a,int b){ //值参数传递不能实现交换两个整数
           int t;
           t = a;
           a = b;
           b = t;
     }

    在C++,可以通过引用或者指针来实现两个整数的交换,实质上是通过地址传递来实现两个整数的交换的。

    void swap2(int &a,int &b)//引用传递
    {
         int temp;
         temp = a;
         a = b;
         b = temp;
    }

    还可以通过指针来实现两个整数的交换

    void swap2(int *a,int *b)//指针,地址传递
    {
         int temp;
         temp = *a;
         *a = *b;
         *b = temp;
    }

    那么java中又是如何实现两个整数的交换呢?

    方法1:

    通过数组方式交换:

    如果一定要通过一个   method   来实现,下面的形式也许可以:
     

    void   swap(int[]   a)   {
       if (a == null   ||   a.length != 2) {
           throw   new   IllegalArgumentException();
        }
        int   temp   =   a[0];
        a[0]   =   a[1];
        a[1]   =   temp;
    } 
    

    代码实例如下:

    //SwapInteger.java
    
    //实现个整数的交换 
    public class SwapInteger 
    {
         public static void swap(int a[]){
         //数组传递实现交换两个整数 
         int t; t = a[0]; 
         a[0] = a[1]; a[1] = t; 
    } 
    
        public static void main(String args[]){
             int []a = new int[2]; 
             a[0] = 3; 
             a[1] = 4; 
             swap(a); 
             System.out.println(a[0] + "\t" + a[1]); 
        } 
    }

    2)方法2:

    构造对象,将a,b作为对象的属性,然后操作对象,最后获得对应的属性。

    有人说可以用Integer类来实现,这是错误的说法。

    理由如下:

    Integer不行,
    1、Integer本身是值对象(value   object),不能修改它的内容(找找哪个方法能修改它的内容?)。实际上,串对象String都不能改变;
    2、就算Integer本身可以修改,自动装箱、拆箱也不灵:
    void   exchange(   Integer   ao,   Integer   bo   )   {   交换ao和bo中的实际数据   }
    int   a,   b;

    exchange(   a,   b   );   //   自动装箱机制生成了两个临时对象,不过调用返回时不能传回a和b。
    最多只能这样:
    Integer   ao=a;
    Integer   bo=b;
    exchange(   ao,   bo   );
    a   =   ao;
    b   =   bo;
     

    例题:交换JAVA数组中两数

    该代码实现功能:

    1.接受用户输入10个整数,并存入Array

    2.将Array中的最大值与最小值交换位置

    java程序如下:

    //SwapNumber.java
    
    //例题:交换JAVA数组中两数
    //该代码实现功能:
    //1.接受用户输入10个整数,并存入Array
    //2.将Array中的最大值与最小值交换位置
    
    import java.util.Scanner; 
    public class SwapNumber 
    { 
    	public static void main(String[] argv) { 
    		Scanner input = new Scanner(System.in); 
    		int maxIndex = 0; //标记最大值索引 
    		int minIndex = 0; //标记最小值索引 
    		int numbers[] = new int[10]; 
    		//声明数组接受用户输入 
    		System.out.println("请输入十个数字:"); 
    		//循环接收 
    		for (int i = 0; i < numbers.length; i++) { 
    			numbers[i] = input.nextInt();
    		} 
    		int temp = 0; //临时变量 
    		int max = numbers[0]; //标记最大值
    		int min = numbers[0]; //标记最小值 
    		//查找最大,最小索引 
    		for (int i = 0; i < numbers.length; i++) { 
    			if (numbers[i] > max) { 
    				max = numbers[i]; //一定要将该值赋给max!!!!!
    				maxIndex = i; 
    			} 
    			if (numbers[i] < min) {
    				min = numbers[i]; 
    				minIndex = i; 
    			} 
    		} 
    		//输出排序前结果
    		System.out.println("最大值与最小值交换前:"); 
    		for (int a : numbers) { 
    			System.out.print(a + " "); 
    		} 
    		System.out.println("\n");
    		
    		//最大值与最小值交换操作 
    		temp = numbers[maxIndex]; 
    		numbers[maxIndex] = numbers[minIndex]; 
    		numbers[minIndex] = temp; 
    		
    		//输出最大值与最小值交换后的结果
    		System.out.println("最大值与最小值交换后:"); 
    		for (int i = 0; i < numbers.length; i++) { 
    			System.out.print(numbers[i] + " "); 
    		} 
    	   }
    }
  • 相关阅读:
    传感器系列之4.4超声测距传感器
    传感器系列之4.3流量传感器
    传感器系列之4.2气压传感器
    传感器系列之4.12GPS定位传感器
    传感器系列之4.1振动传感实验
    传感器系列之3.4继电器
    传感器系列之3.2直流电机
    Spring切面编程步骤
    SpringMVC中的java.lang.ClassNotFoundException: org.aspectj.weaver.BCException 调试过程记录
    SpringMVC中使用@Value给非String类型注入值
  • 原文地址:https://www.cnblogs.com/ccf19881030/p/12004932.html
Copyright © 2011-2022 走看看