黑马程序员技术交流社区

标题: 关于排序的疑问,我懵了。 [打印本页]

作者: TanQiao    时间: 2015-4-2 21:15
标题: 关于排序的疑问,我懵了。
  1. public static void sort(char[] arr)
  2.         {
  3.                 for(int i=0;i<arr.length-1;i++)
  4.                 {
  5.                         for(int x=i+1;x<arr.length;x++)
  6.                         {
  7.                                 if(arr[i]>arr[x])
  8.                                         {
  9.                                                 char temp;
  10.                                                 temp=arr[i];
  11.                                                 arr[i]=arr[x];
  12.                                                 arr[x]=temp;
  13.                                         }
  14.                         }
  15.                 }
复制代码


*********************************************************************************

  1. public static void sort(char[] arr)
  2.         {
  3.                 for(int i=0;i<arr.length-1;i++)
  4.                 {
  5.                         for(int x=i+1;x<arr.length;x++)
  6.                         {
  7.                                 if(arr[i]>arr[x])
  8.                                         {
  9.                                                 exchange(arr[i],arr[x]);
  10.                                         }
  11.                         }
  12.                 }
  13.         }
  14.         public static void exchange(char a,char b)
  15.         {
  16.                         char temp;
  17.                         temp=a;
  18.                         a=b;
  19.                         b=temp;
  20.         }
复制代码




上面的两段代码,第一段能排序,第二段为什么不能了??求大神讲解下,不胜感激。
作者: TanQiao    时间: 2015-4-2 21:16
先在此谢过了,大神们
作者: 田晓莉    时间: 2015-4-2 21:43
这个问题我也遇到过,等大神解析~(是不是和exchange()交换了数值,没返回值有关??)
作者: longlongint    时间: 2015-4-2 21:48
形式参数的改变不会影响到实际参数  意思就是形式参数a和b的改变了 但数组的值没有改变
作者: TanQiao    时间: 2015-4-2 21:49
田晓莉 发表于 2015-4-2 21:43
这个问题我也遇到过,等大神解析~(是不是和exchange()交换了数值,没返回值有关??) ...

记得几年前在学校学C语言的时候也有这个问题,如果用指针操作数组的话就没问题。我看毕老师的视频上用于交换数组的两个数的方法的形参是这样的(char[] arr,int i,int x),i和x是下标。
作者: TanQiao    时间: 2015-4-2 21:50
longlongint 发表于 2015-4-2 21:48
形式参数的改变不会影响到实际参数  意思就是形式参数a和b的改变了 但数组的值没有改变 ...

谢谢了,好像是这样的,想起了原来学C语言也是这样的。:handshake
作者: tubao1991    时间: 2015-4-2 21:59
应该是arr[i]与a 不等价,数组采用的是引用变量。我是这么理解的
作者: 齐小灰同学    时间: 2015-4-2 22:22
第二段内循环的判断条件的地方不对。你这个应该是  x<arr.length-1-i  你试试对吗
作者: TanQiao    时间: 2015-4-2 22:29
齐小灰同学 发表于 2015-4-2 22:22
第二段内循环的判断条件的地方不对。你这个应该是  x

循环没问题,问题在于第二段代码不能起到排序的作用,上面的哥们已经让我明白了,***形式参数的改变不会影响到实际参数***。还是谢谢你的回答。:)
作者: 佐佑    时间: 2015-4-2 22:55
先看在敲吧
作者: xiaotian741    时间: 2015-4-2 22:59
先熟悉  再理解
作者: zouxx    时间: 2015-4-2 23:35
学习了。。。
作者: _etc    时间: 2015-4-2 23:43
变量的作用域需要好好掌握。
作者: Mr.南郭    时间: 2015-4-3 13:56
longlongint 发表于 2015-4-2 21:48
形式参数的改变不会影响到实际参数  意思就是形式参数a和b的改变了 但数组的值没有改变 ...

学习了,Java 中是按值传递参数(引用类型或基本类型),其实都是传递他们的一份拷贝.而不是数据本身.
作者: shw16888    时间: 2015-4-3 14:04
我也是醉了
作者: TanQiao    时间: 2015-4-3 16:57
shw16888 发表于 2015-4-3 14:04
我也是醉了

何醉之有??




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