黑马程序员技术交流社区

标题: 数组排序究结了我一下午 [打印本页]

作者: 徐宏波    时间: 2012-3-12 19:52
标题: 数组排序究结了我一下午
本帖最后由 徐宏波 于 2012-3-19 12:48 编辑

class SelectSort
{
        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[x];
                                        arr[x]=arr[y];
                                        arr[y]=temp;
                                }       
                        }
                }
        }       
        public static void printArray(int[] arr)        {
                        for(int x=0;x<arr.length;x++)
                        {
                                if(x!=arr.length)
                                {
                                        System.out.print(arr[x]+", ");
                                }
                                else
                                        System.out.println(arr[x]);
                                               
                        }
        }

        public static void main(String[] args)
        {
                int[] arr=new int[]{1,2,3,8,7,6,12,10};
                printArray(arr);
                SelectSort(arr);
                printArray(arr);       
        }
}


数组按从小到大的顺序排列,然后与未排序之前一起打印出来,分两行..但我打印完不换行,都在一行里了..可是我是用的println啊,,帮我看下怎么回事了.我弄了老半天了
作者: 徐宏波    时间: 2012-3-12 19:55
我吃饭去,,希望谁帮我看一下啊,,回来不行我就得发群里了..{:soso_e118:}
作者: 张希强    时间: 2012-3-12 20:00
for(int x=0;x<arr.length;x++)
                        {
                                if(x!=arr.length)
                                {
                                        System.out.print(arr[x]+", ");
                                }
                                else
                                        System.out.println(arr[x]);
                                                
                        }
错在这个里面,x永远不可能等于arr.length所以这个System.out.println(arr[x]);根本没有执行
  if(x!=arr.length)换成  if(x!=arr.length-1)就好了。
作者: 赵孟恩    时间: 2012-3-12 20:05
class SelectSort
{
         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[x];
                                         arr[x]=arr[y];
                                         arr[y]=temp;
                                 }        
                        }
                 }
         }        
        public static void printArray(int[] arr)        {
                         for(int x=0;x<arr.length;x++)
                         {
                                 if(x!=arr.length)   //  你这句写得不合理,  你想最后一个换行 那么应该是  x != arr.length-1   要不你换行的那句根本不执行
                                 {
                                         System.out.print(arr[x]+", ");
                                 }
                                 else
                                         System.out.println(arr[x]);
                                                
                        }
         }

        public static void main(String[] args)
         {
                 int[] arr=new int[]{1,2,3,8,7,6,12,10};
                 printArray(arr);
                 SelectSort(arr);
                 printArray(arr);        
        }
}


作者: 刘宁    时间: 2012-3-12 20:06
本帖最后由 刘宁 于 2012-3-12 20:11 编辑

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]+"]");
                }
       
        }
这个是正确的方式。
if(x!=arr.length) 不对。
欢迎交流指正。

作者: 冯林    时间: 2012-3-12 20:10
public static void printArray(int[] arr)        {
                        for(int x=0;x<arr.length;x++)
                        {
                                if(x!=arr.length)
                                {
                                        System.out.print(arr[x]+", ");
                                }
                                else
                                        System.out.println(arr[x]);
                                               
                        }
        }
当x==arr.length时,for循环里的条件已经不成立了,已经停止了for循环。自然执行不到换行语句。把判断条件改为x!=arr.length-1
作者: 倪鹏博    时间: 2012-3-12 20:28
子曰:楼上的同学说的对啊!
数组的长度是arr.length,但是数组的下标是从0开始的,所以最后一个元素的下标是arr.length-1  !
你就错在把数组的最后一个元素下标当成arr.length了。
作者: 徐宏波    时间: 2012-3-13 02:42
张希强 发表于 2012-3-12 20:00
for(int x=0;x

{:2_30:}懂了,谢谢各位了,




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