这个java程序的change函数为什么不起作用

来源:百度知道 编辑:UC知道 时间:2024/05/21 08:06:09
public class kakas {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = new int[] { 67, 38, 96, 58, 1, 4, 90, 56, 3, 78 };
int min = 0;
int d=0;
for (int i = 0; i <= 8; i++) {
min = i;
for (int j = i + 1; j <= 9; j++)

if (a[min] > a[j])
min = j;
/*d=a[min];
a[min]=a[i];
a[i]=d;
*/

change(a[min], a[i]);//这行为什么不起作用,函数些错了吗

}
for (int k = 0; k <= 9; k++)
System.out.println(a[k]);
}

public static void change(int a, int b) {
int c = 0;
c = a;
a = b;
b = c;
}

}

这样change不行,在C++中你可以传入a,b的地址或引用这样可以。
你可以这样写
public static void change(int[] arr, int a, int b) {
int c = arr[a];
arr[a] = arr[b];
arr[b] = c;
}
调用
change(a,min, i);

change()方法参数a,b作为形式参数,相当于方法中的局部变量,改变的值只在方法内部有效,方法结束后值不会改变。
而数组不同,可以看作对象,传递的是句柄,指向的是同一对象,当方法的参数是数组,在方法内改变数组的值,值是会改变的。

建议把数组作为change()方法参数
public static void change(int min, int i,int[] a) {
int d = 0;
d=a[min];
a[min]=a[i];
a[i]=d;
}
调用change()方法时:change(min, i,a);

这样排序功能就能实现了。

if (a[min] > a[j])
min = j; //这个时候他们的下标都是小的那个数在数组中的下标 这要改下

用楼上的方法
public static void change(int min, int i,int[] a) {
int d = 0;
d=a[min];
a[min]=a[i];
a[i]=d;
}

change确实被调用了,但是你传进去的不是对象,所以change运行后数组变量不会改变。

就是说这种情况下,public static void change(int a, int b) 中a和b是作为形参使用的。