A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© trhthyj 中级黑马   /  2014-4-17 23:37  /  1184 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么调用exchange方法就排不了顺序?

  1. class ArraySort
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr={12,5,3,89,30,2,31};
  6.                 selectSort(arr);
  7.                 printArray(arr);
  8.                
  9.         }

  10.         public static void selectSort(int[] arr)
  11.         {
  12.                 for(int x=0;x<arr.length-1;x++)
  13.                 {
  14.                         for(int y=x+1;y<arr.length;y++)
  15.                         {
  16.                                 if(arr[x]>arr[y])
  17.                                 {
  18.                                         exchange(arr[x],arr[y]);
  19.                                 }

  20.                         /*
  21.                                 为什么上面写        int temp=arr[x];
  22.                                                 arr[x]=arr[y];
  23.                                                 arr[y]=temp;
  24.                                 可以排序,而调用exchange就不会排序,而是按原来的顺序打印出来呢?
  25.                        

  26.                         */
  27.                                
  28.                         }
  29.                 }
  30.         }
  31.        
  32.         public static void printArray(int[] arr)
  33.         {
  34.                 System.out.print("[");
  35.                 for(int x=0;x<arr.length;x++)
  36.                 {
  37.                         if(x!=arr.length-1)
  38.                                 System.out.print(arr[x]+",");
  39.                         else
  40.                                 System.out.println(arr[x]+"]");
  41.                 }
  42.         }

  43.         public static void exchange(int x,int y)
  44.         {
  45.                
  46.                
  47.                 {
  48.                         int temp=x;
  49.                         x=y;
  50.                         y=temp;
  51.                 }

  52.         }
  53.        
  54. }

























































复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
你的exchange方法的形式参数是int型的,也就是基本类型,当传入实际参数的时候,传的原变量值的拷贝,而不是引用,所以,你在exchange方法中修改x,y的操作,不会改变原来变量的值!
public static void exchange(int[] arr, int x,int y)
        {
      
                {
                        int temp=arr[x];
                        arr[x]=arr[y];
                        arr[y]=temp;
                }

        }
改成这样就可以了
        

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 1 0
其实你要弄明白的就是你那个excheng();函数式没有返回值的,所以你传x,y进去是没有办法把调过来的数值返回来的,但你在方法里面直接实现就不会有这个问题。
public static void exchange(int arr[],int x,int y)
        {
                {
                        int temp=arr[x];
                        arr[x]=arr[y];
                        arr[y]=temp;
                }
        }  


这样的效果就不一样,数组一直在内存里,在这里传x,y值进来直接就把数组的两个值交换,数组就变了。
希望有技术分吧,纯手打不容易,大半夜的

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
数组反转问题


请看下这篇帖子二楼的回答,解释得非常清楚到位
回复 使用道具 举报
是这么个道理~
回复 使用道具 举报


你的方法错了,自然就无法正确输出结果。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢大家!
回复 使用道具 举报
追逐 高级黑马 2014-4-18 07:37:33
8#
  1. package test.test;

  2. class Sort
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] arr={12,5,3,89,30,2,31};
  7.                 printArray(arr); //排序前
  8.                 selectSort(arr);
  9.                 printArray(arr); //排序后
  10.                
  11.         }

  12.         public static void selectSort(int[] arr)
  13.         {
  14.                 for(int x=0;x<arr.length-1;x++)
  15.                 {
  16.                         for(int y=x+1;y<arr.length;y++)
  17.                         {
  18.                                 if(arr[x]>arr[y])
  19.                                 {
  20.                                                 //因为要操作的是数组中的角标的位置。所以这里应该有三个参数,一个是数组,还有两个代表角标位
  21.                                         exchange(arr, x, y);
  22.                                 }

  23.                         /*
  24.                                 为什么上面写        int temp=arr[x];
  25.                                                 arr[x]=arr[y];
  26.                                                 arr[y]=temp;
  27.                                 可以排序,而调用exchange就不会排序,而是按原来的顺序打印出来呢?
  28.                         

  29.                         */
  30.                                 
  31.                         }
  32.                 }
  33.         }
  34.         
  35.         public static void printArray(int[] arr)
  36.         {
  37.                 System.out.print("[");
  38.                 for(int x=0;x<arr.length;x++)
  39.                 {
  40.                         if(x!=arr.length-1)
  41.                                 System.out.print(arr[x]+",");
  42.                         else
  43.                                 System.out.println(arr[x]+"]");
  44.                 }
  45.         }

  46.         public static void exchange(int[] arr, int x, int y)
  47.         {
  48.                
  49.                
  50.                 {
  51.                         int temp=arr[x];
  52.                         arr[x]=arr[y];
  53.                         arr[y]=temp;
  54.                 }

  55.         }
  56.         
  57. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
lzhuas 中级黑马 2014-4-18 10:33:21
9#

谢谢,终于有人夸了,一起努力哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马