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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李东梁 中级黑马   /  2014-4-16 14:44  /  797 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李东梁 于 2014-4-16 14:46 编辑

为什么我用函数功能来表示注释的内容,排序就不能排了,请看我的代码
  1. package cn.itcast.fanzhuan;

  2. import java.util.Arrays;

  3. public class FanZhuanDemo {

  4.         public static void main(String[] args) {
  5.                
  6.                 String str="abcde";
  7.                 str=mySort(str);
  8.                 System.out.println(str);
  9.         }
  10.         public static String mySort(String str) {
  11.                
  12.                 char[]strs=str.toCharArray();
  13.                
  14.                 swap(strs);        

  15.                 return new String(strs);
  16.         }
  17.         public static void swap(char[]strs) {
  18.                 char ch=0;
  19.                 for (int i = 0; i < strs.length/2; i++) {
  20.                         /*
  21.                         ch=strs[i];
  22.                         strs[i]=strs[strs.length-i-1];
  23.                         strs[strs.length-i-1]=ch;
  24.                       */
  25.                         change(strs[i],strs[strs.length-i-1]);//用函数代替上面注释的代码
  26.                 }
  27.         }
  28.         private static void change(char c, char d) {
  29.                 char ch=' ';
  30.                 ch=c;
  31.                 c=d;
  32.                 d=ch;
  33.         }
  34. }
复制代码

4 个回复

正序浏览
学的很复杂!
回复 使用道具 举报
首先你没弄清楚值传递和引用传递。
byte short int long float double boolean char这些基本数据类型作为参数的时候都是属于值传递的,在方法内部对形参的值进行修改,不会影响到调用方法处原变量的值。
像数组,类类型作为参数,传递进方法的是引用类型,方法内外的操作指向同一地址空间,所以方法内部对形参的操作是会影响到调用方法处变量的值。
改一下你的代码,参数换成数组类型就可以了
回复 使用道具 举报
楼上说的对,看来楼主没看毕老师的视频啊,要不不能连这个都不知道
回复 使用道具 举报
你后来修改的这个方法,与被你注释掉的地方是不一样的。
在你注释的掉的方法中,实现了数组中元素的互换;
但是传入change中的两个参数实际是两个char变量值,在change方法中实现了两个值的互换,但并没有实现数组元素中的互换。
这种问题也有人问过。要理解基本数据变量与引用变量的值的区别,基本数据变量存储的是数据值,而引用变量存储的是引用对象的地址,作参数传入时,都传递的是值的复制品,对于基本数据变量来说是两个值,而对于引用变量来说操作的是同一个引用对象,在无返回值的情况下,基本数据变量和引用变量的值都没发生改变,但是引用变量所引用对象却可能发生改变了。
建议修改change函数,将str数组的地址传入其中,实现数组的元素的互换。
  1. private static void change(char[] str, int i) {
  2. char ch=strs[i];
  3. strs[i]=strs[strs.length-i-1];
  4. strs[strs.length-i-1]=ch;
  5.    }

复制代码

评分

参与人数 2技术分 +1 黑马币 +12 收起 理由
李东梁 + 12 赞一个!
菜小徐 + 1

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马