A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夕颜 中级黑马   /  2015-4-17 22:06  /  924 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对一个数组进行选择排序,我自己写了一个方法,再加上了老师的一个方法,并将排序结果打印出来,两次的结果不一样。ps:分别指用一个方法都是正确的,为什么两个方法一起就是错的呢?代码如下:class ArrayPaiXu
{
/*{5,1,6,4,2,8,9}排序并输出*
分析:
     1、该功能没有返回值;
     2、不需要未知内容参与;
*/
    public static void selectSort(int[] arr)
    {
        int[] myArray = new int[arr.length];
        int num =0;

        for(int i=0;i<arr.length;i++)
        {
              int min = arr[i];
                    for(int j=i;j<arr.length;j++)
                    {
                    if(arr[j]<min)
                    {
                              num = arr[j];
                              arr[j] = min;
                              min = num;
                    }
                    }
                    myArray[i] = min;
        }
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(myArray[i]);
        }
    }
    //老师的方法
    public static void selectSortT(int[] arr)
    {
             //int num = arr[0],num1 = 0;
             
       for(int i=0;i<arr.length-1;i++)
       {
                   for(int j=i+1;j<arr.length;j++)
                   {
                     if(arr[i]>arr[j])
                           {
                                     int temp = arr[i];
                                     arr[i] = arr[j];
                                     arr[j] = temp;
                                     
                           }       
                        
                   }

       }       
       for(int i=0;i<arr.length;i++)
       {
           System.out.print(arr[i]);       
       }

    }
    public static void main(String[] args)
    {
        int[] arr = {5,1,6,4,2,8,9};
        selectSort(arr);
        System.out.println();
        selectSortT(arr);

    }
}

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

17 个回复

倒序浏览
arr.length,你有定义arr吗?
回复 使用道具 举报
王善辉 发表于 2015-4-17 22:17
arr.length,你有定义arr吗?

定义了 子啊主函数main里面
回复 使用道具 举报
补充说明一下,数组在内存的存储方式有关
回复 使用道具 举报
数组都没定义
回复 使用道具 举报
你自己的方法有问题,因为你每次两个元素比较的时候,将值小的元素赋给min,然后将较小的值赋给的是myArray[i] ,而实际上,应该存入的是arr[i]中。而且你打印的是myArray这个数组。可以在内循环外加上一句:arr[i]=min;然后就OK了
回复 使用道具 举报
夕颜 中级黑马 2015-4-17 23:12:25
7#

数组定义在主函数main里面
回复 使用道具 举报
夕颜 中级黑马 2015-4-17 23:13:56
8#
关山明月 发表于 2015-4-17 22:56
你自己的方法有问题,因为你每次两个元素比较的时候,将值小的元素赋给min,然后将较小的值赋给的是myArray ...

在内循环for结束的时候我把min值赋值给了myArray数组,可以赋值代码编译执行看看
回复 使用道具 举报
Dylon 中级黑马 2015-4-17 23:42:32
9#
在你的方法里把排序后的数据放在myArray[]里面了 ,而且还把数组arr[]的内部值改变了,像楼上说的在第一层的for循环里面加上arr[i] = min; 就好了。
for(int i=0;i<arr.length;i++)
        {
              int min = arr[i];
                    for(int j=i;j<arr.length;j++)
                    {
                    if(arr[j]<min)
                    {
                              num = arr[j];
                              arr[j] = min;
                              min = num;
                    }
                    }
                    myArray[i] = min;
                    arr[i] = min;
        }
回复 使用道具 举报
夕颜 发表于 2015-4-17 23:13
在内循环for结束的时候我把min值赋值给了myArray数组,可以赋值代码编译执行看看 ...

是的,但是你最终是要给arr这个数组排序呀,所以要将排序后的结果存入arr中,你的方法里,是将排序后的结果存入到了myArray里,而arr这个数组里每一轮比较后,并没有将每一轮的最小值分别存到arr数组里。你可以在你自己的方法里将arr数组中的元素打印出来看一下。你会发现arr数组中的元素和arr原来的元素不一样。所以用老师排序的结果和你的不同,因为数组是引用类型,你在你的方法中将arr中的元素改变了,用老师的方法排的是改变后的数组顺序。。。
回复 使用道具 举报 1 0
咳咳咳·············
回复 使用道具 举报
楼上正解  
这样输出一下你就知道了    你的arr[]里面存的一直都是较大的数之后排序结束你也没把排序完成的元素重新赋值给arr[]
public static void selectSort(int[] arr)
{
    int[] myArray = new int[arr.length];
    int num =0;

    for(int i=0;i<arr.length;i++)
    {
          int min = arr[i];
                for(int j=i;j<arr.length;j++)
                {
                if(arr[j]<min)
                {
                          num = arr[j];
                          arr[j] = min;
                          min = num;
                }
                }
                myArray[i] = min;
    }
    for(int i=0;i<arr.length;i++)
    {
        System.out.print(myArray[i]);
    }
    System.out.println();
    for(int i=0;i<arr.length;i++)
    {
        System.out.print(arr[i]);
    }
}
public static void main(String[] args)
{
    int[] arr = {5,1,6,4,2,8,9};
    selectSort(arr);
}
回复 使用道具 举报
q8893616 发表于 2015-4-18 00:10
楼上正解  
这样输出一下你就知道了    你的arr[]里面存的一直都是较大的数之后排序结束你也没把排序完成的 ...

嗯嗯,是的,第一个方法  我把结果给了另一个数组
回复 使用道具 举报
关山明月 发表于 2015-4-17 23:55
是的,但是你最终是要给arr这个数组排序呀,所以要将排序后的结果存入arr中,你的方法里,是将排序后的结 ...

嗯嗯 是的  第一次看到这样的结果  吓到我了
回复 使用道具 举报
Dylon 发表于 2015-4-17 23:42
在你的方法里把排序后的数据放在myArray[]里面了 ,而且还把数组arr[]的内部值改变了,像楼上说的在第一层 ...

嗯嗯  的确是如此  这个还真没想到  长见识了
回复 使用道具 举报
我就喜欢看大家讨论,强势围观
回复 使用道具 举报
ulddfhv 发表于 2015-4-18 00:43
我就喜欢看大家讨论,强势围观

笑而不语是吗
回复 使用道具 举报
哪里,我就是来跟美女聊聊人生的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马