黑马程序员技术交流社区
标题:
菜鸟之冒泡排序
[打印本页]
作者:
烟花雨
时间:
2013-10-30 17:09
标题:
菜鸟之冒泡排序
本帖最后由 烟花雨 于 2013-10-31 09:17 编辑
为什么下面注释的方法不能实现互换??
public class Str {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr={5,6,1,9};
paixu(arr);
for(int s:arr){
System.out.println(s);
}
}
private static void paixu(int[] arr) {
// TODO Auto-generated method stub
for(int i=0;i<arr.length-1;i++){
for (int j = i+1; j < arr.length; j++) {
if(arr
>arr[j])
swap(arr,i,j);
//swap(arr
,arr[j]); 为什么这个方法不能实现互换???
}
}
}
/* private static void swap(int i,int j) {
int temp = i;
i = j;
j = temp;
}
*/
private static void swap(int[] arr, int i, int j) {
int temp = arr
;
arr
= arr[j];
arr[j] = temp;
}
}
作者:
贺奕凯
时间:
2013-10-30 17:23
因为形参与实参不符
private static void swap(int[] arr,
int i
,
int j
)
swap(
arr
,
arr[j]
); 改为 →
swap(
arr,i,j
);
作者:
miedongdong
时间:
2013-10-30 19:42
lz,你的本意是想通过角标的交换来实现数组中数的调换吗?我刚刚试了一下,这是不可以的,
我把你的代码稍微改一下,
<p>class test
{ </p><p> public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr={5,6,1,9};
paixu(arr);
for(int s:arr){
System.out.print(s);
}</p><p> }</p><p> private static void paixu(int[] arr) {
// TODO Auto-generated method stub
for(int i=0;i<arr.length-1;i++){
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j])
System.out.println("i="+i+" "+"arr[i]="+arr[i]+" "+"j=" +j+" "+"arr[j]="+arr[j]); //这句代码是输出交换前 i 和 j 的值
// swap(arr,i,j);
swap(i,j); // 为什么这个方法不能实现互换???
System.out.println("i="+i+" "+"arr[i]="+arr[i]+" "+"j=" +j+" "+"arr[j]="+arr[j]);//这句代码是输出交换后 i 和 j 的值
}
}</p><p>
}
private static void swap(int i,int j) {
System.out.println(i+" "+j); //交换前 i 和 j的值
int temp = i;
i = j;
j = temp;
System.out.println(i+" "+j); //交换后 i 和 j的值
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;</p><p> }</p><p>
}
</p><p> </p>
复制代码
通过运行这个代码,就发现是局部变量的问题,因为在swap方法中,i 和 j 的值的确是交换了,
可是出来swap方法,之前在栈中开辟的变量空间就自动消失了,所以交换的结果就显示不出来
而数组是在堆中开辟空间,是有地址去指向的,所以改变数组的值,在调用数组的方法没结束前,
数组都会存在,所以第二个方法就可以成功交换
这是我的一点想法,如果有什么不对的请各位指出,谢谢了
作者:
Jim-剣◆﹏
时间:
2013-10-30 20:13
明确一点:java中只有值传递,没有引用传递
作者:
黄炳期
时间:
2013-10-30 21:56
楼主你好,如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的链接
http://bbs.itheima.com/thread-89313-1-1.html
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2