黑马程序员技术交流社区
标题:
请教数组排序的问题。
[打印本页]
作者:
trhthyj
时间:
2014-4-17 23:37
标题:
请教数组排序的问题。
为什么调用exchange方法就排不了顺序?
class ArraySort
{
public static void main(String[] args)
{
int[] arr={12,5,3,89,30,2,31};
selectSort(arr);
printArray(arr);
}
public static void selectSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)
{
if(arr[x]>arr[y])
{
exchange(arr[x],arr[y]);
}
/*
为什么上面写 int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
可以排序,而调用exchange就不会排序,而是按原来的顺序打印出来呢?
*/
}
}
}
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
public static void exchange(int x,int y)
{
{
int temp=x;
x=y;
y=temp;
}
}
}
复制代码
作者:
曹冬明
时间:
2014-4-17 23:45
你的exchange方法的形式参数是int型的,也就是基本类型,当传入实际参数的时候,传的原变量值的拷贝,而不是引用,所以,你在exchange方法中修改x,y的操作,不会改变原来变量的值!
public static void exchange(int[] arr, int x,int y)
{
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
改成这样就可以了
作者:
lzhuas
时间:
2014-4-18 00:01
其实你要弄明白的就是你那个excheng();函数式没有返回值的,所以你传x,y进去是没有办法把调过来的数值返回来的,但你在方法里面直接实现就不会有这个问题。
public static void exchange(int arr[],int x,int y)
{
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
这样的效果就不一样,数组一直在内存里,在这里传x,y值进来直接就把数组的两个值交换,数组就变了。
希望有技术分吧,纯手打不容易,大半夜的
作者:
NewDemo
时间:
2014-4-18 00:08
数组反转问题
请看下这篇帖子二楼的回答,解释得非常清楚到位
作者:
悠然丶
时间:
2014-4-18 00:13
是这么个道理~
作者:
莫若吻
时间:
2014-4-18 00:19
(99.74 KB, 下载次数: 34)
下载附件
2014-4-18 00:17 上传
你的方法错了,自然就无法正确输出结果。
作者:
trhthyj
时间:
2014-4-18 06:43
谢谢大家!
作者:
追逐
时间:
2014-4-18 07:37
package test.test;
class Sort
{
public static void main(String[] args)
{
int[] arr={12,5,3,89,30,2,31};
printArray(arr); //排序前
selectSort(arr);
printArray(arr); //排序后
}
public static void selectSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)
{
if(arr[x]>arr[y])
{
//因为要操作的是数组中的角标的位置。所以这里应该有三个参数,一个是数组,还有两个代表角标位
exchange(arr, x, y);
}
/*
为什么上面写 int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
可以排序,而调用exchange就不会排序,而是按原来的顺序打印出来呢?
*/
}
}
}
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
public static void exchange(int[] arr, int x, int y)
{
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
复制代码
作者:
lzhuas
时间:
2014-4-18 10:33
NewDemo 发表于 2014-4-18 00:08
数组反转问题
谢谢,终于有人夸了,一起努力哈
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2