黑马程序员技术交流社区

标题: 编译出错,求解(已解决) [打印本页]

作者: 唐学松    时间: 2012-6-6 23:06
标题: 编译出错,求解(已解决)
本帖最后由 唐学松 于 2012-6-6 23:26 编辑

class test   
{
        public static void main(String[] args)                          
        {
                int jiu []={12,14,54,65,31};

               
                   getindex(jiu);// 输出没问题,但是排序还是乱序输出,而不是排序整理好输出
                        

                   printArray(jiu);      
           }

  public static void getindex(int [] arr)
        {
        
                for (int x=0;x<arr.length-1 ;x++ )
                  {
                        for (int y=x+1;y<arr.length-1 ;y++ )

                                        {
                                                if (arr[x]>arr[y])
                                                {
                                                        int temp=arr[x];
                                                        arr[x]=arr[y];
                                                        arr[y]=temp;

                                                        
                                                }
                                        }         
                        }
        }
        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]+"]");

                }               
        }
               
        
        
}
作者: 龙秋地    时间: 2012-6-6 23:17
楼主做的是选择排序,具体代码应该是:
  1. public static void selectSort(int[] arr)  
  2.     {  
  3.         for(int x=0; x<arr.length-1;x++)  
  4.         {  
  5.             for(int y=x+1;y<arr.length;y++)  //注意y的值
  6.             {  
  7.                 if(arr[x]>arr[y])  
  8.                 {  
  9.                     
  10.                     int temp = arr[x];
  11.                     arr[x] = arr[y];
  12.                     arr[y] = temp;
  13.                      
  14.                   
  15.                 }  
  16.             }  
  17.         }  
  18.     }  
复制代码
  1. public static void printArray(int[] arr)  
  2.     {  
  3.         System.out.print("[");  
  4.         for(int x=0;x<arr.length;x++)  //注意x的取值.
  5.         {  
  6.             if(x!=arr.length)  
  7.                 System.out.print(arr[x]+", ");  
  8.             else  
  9.                 System.out.println(arr[x]+"]");  
  10.         }  
  11.     }  
复制代码
有两点错误:y的取值范围是y<arr.length,因为角标是比实际元素个数少一的.
还有x的取值范围x<arr.length,因为同上.
作者: 罗文杰    时间: 2012-6-6 23:19
你这里用的选择排序法,第二个for循环中 数组中最后一个元素没有参与比较
   for (int x=0;x<arr.length-1 ;x++ )
                  {
                        for (int y=x+1;y<arr.length-1 ;y++ ) // 这里修改成  y < arr.length 或者 y <= arr.length-1
作者: 闾丘日月    时间: 2012-6-6 23:21
lz代码写错啦,你排序了前面4个,最后一个木有排
把内循环里面改成lengh就好了
作者: 唐学松    时间: 2012-6-6 23:24
龙秋地 发表于 2012-6-6 23:17
楼主做的是选择排序,具体代码应该是:有两点错误:y的取值范围是y

非常感谢
作者: 唐学松    时间: 2012-6-6 23:24
罗文杰 发表于 2012-6-6 23:19
你这里用的选择排序法,第二个for循环中 数组中最后一个元素没有参与比较
   for (int x=0;x ...

非常感谢




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