黑马程序员技术交流社区

标题: 互换位置出现的问题 [打印本页]

作者: 马东华    时间: 2012-4-21 21:37
标题: 互换位置出现的问题
public class SequenceDemo {
public static void main(String[] args) {
  
  int[] arr={3,2,7,8,34,36};
printArray(arr);
  selectSort(arr);
  System.out.println("");
  printArray(arr);
  
}
public static void selectSort(int[] arr){
  for(int x=0;x<arr.length-1;x++)
  {
   for(int y=x+1;y<arr.length;y++ )
   {
    if(arr[x]>arr[y]){
     int temp=arr[y];
     arr[y]=arr[x];
     arr[x]=temp;
    }
   }
  }
  
}
这个程序可以正常运行,但是当我把 int temp=arr[y];
                                                           arr[y]=arr[x];
                                                           arr[x]=temp;  给封装成函数时,为什么就不错结果呢,代码如下

package cn.itcast;
public class SequenceDemo {
public static void main(String[] args) {
  
  int[] arr={3,2,7,8,34,36};
  printArray(arr);
  selectSort(arr);
  System.out.println("");
  printArray(arr);
  
}
public static void selectSort(int[] arr){
  for(int x=0;x<arr.length-1;x++)
  {
   for(int y=x+1;y<arr.length;y++ )
   {
    if(arr[x]>arr[y]){
     exchange(arr[x],arr[y]);
    }
   }
  }
  
}
public static void exchange(int a,int b){
  int temp=a;
  a=b;
  b=temp;
}
public static void printArray(int[] arr){
  System.out.print("[");
  for(int i=0;i<arr.length;i++){
   if(i!=arr.length-1){
    System.out.print(arr[i]+",");
   }
   else
    System.out.print(arr[i]);
  }
  System.out.print("]");
}
}
这个程序运行的结果数组根本就没有进行排序,求解释,谢谢



作者: chenwei    时间: 2012-4-21 21:48
你只是向方法中传了2个值a,b 然后把a和b2个值互换,对数组毫影响
exchange(arr,x,y);   //把数组和所需要替换的2个索引传入
public static void exchange(int [] arr,int a,int b){  //接受数组和索引,再替换
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}

作者: 马东华    时间: 2012-4-21 21:59
chenwei 发表于 2012-4-21 21:48
你只是向方法中传了2个值a,b 然后把a和b2个值互换,对数组毫影响
exchange(arr,x,y);   //把数组和所需要替 ...

谢谢,知道了,原来如此。
作者: 马东华    时间: 2012-4-21 21:59
chenwei 发表于 2012-4-21 21:48
你只是向方法中传了2个值a,b 然后把a和b2个值互换,对数组毫影响
exchange(arr,x,y);   //把数组和所需要替 ...

谢谢,知道了,原来如此




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2