入门级java问题 求各位大牛帮忙解答一下

来源:百度知道 编辑:UC知道 时间:2024/05/31 00:12:02
我想编纯用静态方法编一个字符串排序的程序 如下:
public class SortStringArgs {
public static void main(String[] args){
sort(args);
print(args);
}
public static void sort(String[] a){
for(int i=0;i<a.length-1;i++){
for(int j=a.length-1;j>i;j--){
if(a[j].compareTo(a[j-1])<0)
swap(a[j],a[j-1]);
}
}
}
public static void swap(String a,String b){
String temp="";
temp=a;
a=b;
b=temp;
}
public static void print(String[] a){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}

}
编译通过 但是运行起来无效果
我知道问题是swap()这个方法 好像不能改变args[]的元素 很奇怪
当改成下面的程序是就有效果了...
public class SortStringArgs {
public static void main(String[] args){
sort(args);
print(args);
}
public static void sort(String[] a){
for(int i=0;i<a.length-1;i++){
for(int j=a.length-1;j>i;j--){
if(a[j].c

我没有看你的代码,但是看了别人的建议,应该说是你还没有弄清楚引用传递和值传递这个概念
在java中,所有的传递都是值传递,只是有些传递的是数据值,而有些传递的是地址值
在你的程序中,第一个传递的是数据值,地址没有传递过去,不信你可以在swap中打印两者的值,然后在swap之后再打印两者的值
而第二个可以成功的原因就是因为传递的数组的值是其地址的值,因为java中没有指针这个概念

你需要看看"变量的作用域"这一节.

你第一个程序中传入swap的仅仅是两个值,而不是变量本身

想要在swap中交换参数的值,一般用对象的成员变量

你先前 换来换去 换的只是你定义的2个局部变量而已,对数组本身没有任何影响的 。

这个不难,自己再考虑考虑,这样印象会更深。