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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TanQiao 中级黑马   /  2015-4-2 21:15  /  1194 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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.         }
复制代码




上面的两段代码,第一段能排序,第二段为什么不能了??求大神讲解下,不胜感激。

15 个回复

倒序浏览
先在此谢过了,大神们
回复 使用道具 举报
这个问题我也遇到过,等大神解析~(是不是和exchange()交换了数值,没返回值有关??)
回复 使用道具 举报
形式参数的改变不会影响到实际参数  意思就是形式参数a和b的改变了 但数组的值没有改变
回复 使用道具 举报
田晓莉 发表于 2015-4-2 21:43
这个问题我也遇到过,等大神解析~(是不是和exchange()交换了数值,没返回值有关??) ...

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

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

循环没问题,问题在于第二段代码不能起到排序的作用,上面的哥们已经让我明白了,***形式参数的改变不会影响到实际参数***。还是谢谢你的回答。:)
回复 使用道具 举报
先看在敲吧
回复 使用道具 举报
先熟悉  再理解
回复 使用道具 举报
学习了。。。
回复 使用道具 举报
变量的作用域需要好好掌握。
回复 使用道具 举报
longlongint 发表于 2015-4-2 21:48
形式参数的改变不会影响到实际参数  意思就是形式参数a和b的改变了 但数组的值没有改变 ...

学习了,Java 中是按值传递参数(引用类型或基本类型),其实都是传递他们的一份拷贝.而不是数据本身.
回复 使用道具 举报
我也是醉了
回复 使用道具 举报

何醉之有??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马