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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈志伟 中级黑马   /  2012-4-13 20:03  /  1500 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
  1. public class Array
  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.   public static void SelectionSort(int[] arr)
  11.   {
  12.     for(int x=0;x<arr.length-1;x++)
  13.     {
  14.       for(int y=0;y<arr.length-x;y++)
  15.       {
  16.        if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
  17.        {
  18.         int temp = arr[y];
  19.         arr[y] = arr[y+1];
  20.         arr[y+1]= temp;
  21.        }            
  22.       }     
  23.     }
  24.   }
  25.   
  26.   public static void GetResult(int[] arr)
  27.   {
  28.     for(int x=0;x<arr.length;x++)
  29.     {
  30.       if(x==arr.length-1)
  31.       System.out.println(arr[x]);
  32.       else
  33.       System.out.print(arr[x]+",");      
  34.     }  
  35.   }
  36. }
复制代码
运行结果如下图:

请教错误原因。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
for(int y=0;y<arr.length-x;y++)
if(arr[y]>arr[y+1])//用判断条件来让相邻的两个元素进行比较
这里角标越界了,应该改成y<arr.length-1-x,因为x==0时y最大值取到arr.length-1,此时arr[y+1]角标值为arr.length,数组中最大的角标才arr.length-1.
ps:呵呵,你这函数应该是bubblesort吧?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
错误是数组索引越界,
for(int y=0;y<arr.length-x;y++)
  {
  if(arr[y]>arr[y+1])
当x=0,y<arr.length
当y循环到length-1时,arr[y+1]就超过了数组的长度所以报错了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
报错写得挺明显的,
main的第7行方法,方法中的17行角标越界,
y<length-x 但是+1后 超出了数组长度
所以报错了

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
数组下标越界了。
for(int y=0;y<arr.length-x;y++)
if(arr[y]>arr[y+1])
x=0时,y达到最大值arr.length-1,y+1的值就为arr.length,这样就越界了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马