黑马程序员技术交流社区

标题: 有个疑问 [打印本页]

作者: 惠晖    时间: 2012-12-4 23:24
标题: 有个疑问
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])
                                {
                                        swap(arr,x,y);//如果这里写成swap(arr,arr[x],arr[y])是换位的什么东西呢
                                }
                        }
                }
        }
        public static void swap(int []arr ,int x,int y)
        {
                        int temp=arr[x];
                        arr[x]=arr[y];
                        arr[y]=temp;                        
作者: 罗会涛    时间: 2012-12-4 23:58
当然是把arr[x]H和arr[y]的值作为索引来交换
相当于           int temp=arr[arr[x]];
                         arr[arr[x]]=arr[arr[y]];
                         arr[arr[y]]=temp;     

作者: 惠晖    时间: 2012-12-5 00:04
罗会涛 发表于 2012-12-4 23:58
当然是把arr[x]H和arr[y]的值作为索引来交换
相当于           int temp=arr[arr[x]];
                    ...

class ArrayTest
{
        public static void main(String[] args)
        {
                int[]arr={2,4,3,5,7,6,9,0};
                print(arr);
                selectSort(arr);
                print(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])
                                {
                                                int temp=arr[arr[x]];
                         arr[arr[x]]=arr[arr[y]];
                         arr[arr[y]]=temp;  
                                }
                        }
                }
        }
        public static void swap(int []arr ,int x,int y)
        {
                        int temp=arr[x];
                        arr[x]=arr[y];
                        arr[y]=temp;                               
        }
        public static void print(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]+"]");

                }
        }
}
为什么2次结果不一样
作者: 惠晖    时间: 2012-12-5 00:10
神啊  2个方法 都是同一个意思  结果虚拟机给出2个不同的答案 这是为什么呢
作者: 罗会涛    时间: 2012-12-5 00:11
惠晖 发表于 2012-12-5 00:04
class ArrayTest
{
        public static void main(String[] args)

结果肯定不一样啊,原本想按索引交换数组中的两个元素,现在把值当索引,再换必须不行啊,值所对应的索引有没有都是个问题
作者: 惠晖    时间: 2012-12-5 00:32
罗会涛 发表于 2012-12-5 00:11
结果肯定不一样啊,原本想按索引交换数组中的两个元素,现在把值当索引,再换必须不行啊,值所对应的索引有没 ...

你仔细看下我的代码  我贴的2个代码实际上都是相同的意思  但是结果不一样, 一个是调用了方法,一个是直接把调用的方法 写过来了 没调用,  但是他们2的结果不一样
作者: 杨永胜    时间: 2012-12-5 01:07
那个交换的部分写错了
作者: 罗会涛    时间: 2012-12-5 12:46
惠晖 发表于 2012-12-5 00:32
你仔细看下我的代码  我贴的2个代码实际上都是相同的意思  但是结果不一样, 一个是调用了方法,一个是直 ...

2个代码不是相同的意思,明显不同啊,你怎么认为是相同.
只有数组中的元素是存贮对应位置的角标时才一样.如{0,1,2,3,4}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2