黑马程序员技术交流社区
标题:
请教一个排序问题
[打印本页]
作者:
李东梁
时间:
2014-4-16 14:44
标题:
请教一个排序问题
本帖最后由 李东梁 于 2014-4-16 14:46 编辑
为什么我用函数功能来表示注释的内容,排序就不能排了,请看我的代码
package cn.itcast.fanzhuan;
import java.util.Arrays;
public class FanZhuanDemo {
public static void main(String[] args) {
String str="abcde";
str=mySort(str);
System.out.println(str);
}
public static String mySort(String str) {
char[]strs=str.toCharArray();
swap(strs);
return new String(strs);
}
public static void swap(char[]strs) {
char ch=0;
for (int i = 0; i < strs.length/2; i++) {
/*
ch=strs[i];
strs[i]=strs[strs.length-i-1];
strs[strs.length-i-1]=ch;
*/
change(strs[i],strs[strs.length-i-1]);//用函数代替上面注释的代码
}
}
private static void change(char c, char d) {
char ch=' ';
ch=c;
c=d;
d=ch;
}
}
复制代码
作者:
呆呆沙师妹
时间:
2014-4-16 15:07
你后来修改的这个方法,与被你注释掉的地方是不一样的。
在你注释的掉的方法中,实现了数组中元素的互换;
但是传入change中的两个参数实际是两个char变量值,在change方法中实现了两个值的互换,但并没有实现数组元素中的互换。
这种问题也有人问过。要理解基本数据变量与引用变量的值的区别,基本数据变量存储的是数据值,而引用变量存储的是引用对象的地址,作参数传入时,都传递的是值的复制品,对于基本数据变量来说是两个值,而对于引用变量来说操作的是同一个引用对象,在无返回值的情况下,基本数据变量和引用变量的值都没发生改变,但是引用变量所引用对象却可能发生改变了。
建议修改change函数,将str数组的地址传入其中,实现数组的元素的互换。
private static void change(char[] str, int i) {
char ch=strs[i];
strs[i]=strs[strs.length-i-1];
strs[strs.length-i-1]=ch;
}
复制代码
作者:
曹冬明
时间:
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