黑马程序员技术交流社区

标题: 请教一个排序问题 [打印本页]

作者: 李东梁    时间: 2014-4-16 14:44
标题: 请教一个排序问题
本帖最后由 李东梁 于 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. }
复制代码

作者: 呆呆沙师妹    时间: 2014-4-16 15:07
你后来修改的这个方法,与被你注释掉的地方是不一样的。
在你注释的掉的方法中,实现了数组中元素的互换;
但是传入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.    }

复制代码

作者: 曹冬明    时间: 2014-4-16 15:22
楼上说的对,看来楼主没看毕老师的视频啊,要不不能连这个都不知道
作者: 忘川    时间: 2014-4-16 15:26
首先你没弄清楚值传递和引用传递。
byte short int long float double boolean char这些基本数据类型作为参数的时候都是属于值传递的,在方法内部对形参的值进行修改,不会影响到调用方法处原变量的值。
像数组,类类型作为参数,传递进方法的是引用类型,方法内外的操作指向同一地址空间,所以方法内部对形参的操作是会影响到调用方法处变量的值。
改一下你的代码,参数换成数组类型就可以了
作者: xtxiaolu    时间: 2014-4-16 16:15
学的很复杂!




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