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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史卜坤 中级黑马   /  2012-6-18 10:57  /  1772 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:

class Array
{
   public static void main(String[] args)
   {
     int[] arr={5,1,6,2,8,9};
     GetResult(arr);
     SelectionSort(arr);
     GetResult(arr);
   
   }



  public static void SelectionSort(int[] arr)
  {
    for(int x=0;x<arr.length-1;x++)
    {
      for(int y=0;y<arr.length-x;y++)
      {
       if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
       {
        int temp = arr[y];
        arr[y] = arr[y+1];
        arr[y+1]= temp;
       }
      
      
      }
     
    }
  
  }
  public static void GetResult(int[] arr)
  {
    for(int x=0;x<arr.length;x++)
    {
      if(x==arr.length-1)
      System.out.println(arr[x]);
      else
      System.out.print(arr[x]+",");
     
    }
   
  }
}

20120412_110a343cd5ac49fda07dBcwoO4ToROKj.png (3.33 KB, 下载次数: 15)

20120412_110a343cd5ac49fda07dBcwoO4ToROKj.png

6 个回复

倒序浏览
《java.lang.ArrayIndexOutOfBoundsException:》:这个错误是下标越界。 你的索引值大于数组总长度了,导致发生了这个异常。

public static void SelectionSort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) {
                        for (int y = 0; y < arr.length -1-x; y++) {//你这边错了,我已修改,还需要减1       
                        if (arr[y] > arr[y + 1])// 用判断条件来让相邻的两个元素进行比较
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y + 1];
                                        arr[y + 1] = temp;
                                }

                        }

                }
        }

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
错误原因  java.lang.ArrayIndexOutOfBoundsException(数组角标越界)
for(int y=0;y<arr.length-x;y++)
这地方应该改成  for(int y=0;y<arr.length-x-1;x++)
如果为arr.length-x, 当x=0,y=arr.length-x-1就为arr.length-1,那么y+1的值就为arr.length,而数组中最大角标只能是arr.length-1,所以出现以上错误

希望楼主能明白

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static void SelectionSort(int[] arr)
  {
    for(int x=0;x<arr.length-1;x++)
    {
      for(int y=0;y<arr.length-x;y++)     //这里要写成for(int y=0;y<arr.length-x-1;y++)你这里是选择排序,每次循环比一次后就会少一个比较的数,当到最后一个数的时候,就是相当于自己在跟自己比,自已就不用比较了,就要把自己那个角标减掉,所以要写成y<arr.length-x-1
{
       if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
       {
        int temp = arr[y];
        arr[y] = arr[y+1];
        arr[y+1]= temp;
       }
      
      
      }
     
    }
  
  }
回复 使用道具 举报
public static void SelectionSort(int[] arr)
  {
    for(int x=0;x<arr.length-1;x++)
    {
      for(int y=0;y<arr.length-x;y++)//这条语句导致(索引值大于数组总长度)下标越界异常,应改成  for(int y=0;y<arr.length-x;y++)  
      {
       if(arr[y]>arr[y+1])
       {
        int temp = arr[y];
        arr[y] = arr[y+1];
        arr[y+1]= temp;
       }              
      }     
    }
  }
也就是现在你有6个元素,刚开始就应该比较5次,但你想想要写成你的那样的话,就是比较了6次.....
回复 使用道具 举报
大哥,出现错误的时候应该学会看出错信息,你看你上面的出错信息已经很明确的告诉你了在哪一行出现了什么错误!!!
ArrayIndexOutOfBoundsException翻译过来的意思就是:数组下标越界异常
然后错误信息是在main函数的中低21行出现的,而21这里出错又是SelectionSort中的也就是在程序中的第35行引起的
第一行告诉的是引起下标越界的错误下标是6,也就是说你数组里面的元素少于6个,所以下标就越界了,Understand?
回复 使用道具 举报
  1. class Array1
  2. {
  3.    public static void main(String[] args)
  4.    {
  5.      int[] arr={5,1,6,2,8,9};
  6.      GetResult(arr);
  7.      SelectionSort(arr);
  8.      GetResult(arr);
  9.    
  10.    }



  11.   public static void SelectionSort(int[] arr)
  12.   {
  13.     for(int x=0;x<arr.length-1;x++)    //冒泡排序。。。 一共要做arr.length-1趟,每趟保证可一把最大的数放到最后
  14.     {
  15.       for(int y=0;y<arr.length-x-1;y++)   ///此处修改为arr.length-x-1。//每趟将从0~arr.length-x-1之间每两个数相互比较,共比较arr.length-x
  16.       {
  17.        if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
  18.        {
  19.         int temp = arr[y];
  20.         arr[y] = arr[y+1];
  21.         arr[y+1]= temp;
  22.        }
  23.       
  24.       
  25.       }
  26.      
  27.     }
  28.   
  29.   }
  30.   public static void GetResult(int[] arr)
  31.   {
  32.     for(int x=0;x<arr.length;x++)
  33.     {
  34.       if(x==arr.length-1)
  35.       System.out.println(arr[x]);
  36.       else
  37.       System.out.print(arr[x]+",");
  38.      
  39.     }
  40.    
  41.   }
  42. }

复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马