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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张平 中级黑马   /  2012-3-10 21:36  /  1711 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  ArrayTest02
{
        public static void main(String[] args)
                {
                int[] arr = new int[]{0,7,18,5,6,9,8,4,10,12,14,16};
                printarr1(arr);
                bubbleSort(arr);
                printarr1(arr);
                }
               
        public static void printarr1(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]+"]");
                }
        }
        public static void bubbleSort(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;
                                }
                        }
                }
        }

}


出现Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
        at ArrayTest02.bubbleSort(ArrayTest02.java:30)
        at ArrayTest02.main(ArrayTest02.java:7)

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 倪鹏博 于 2012-3-10 22:05 编辑

bubbleSort中的  for (int y = 0;y<arr.length-x ;y++ )
y<arr.length-x改成y<arr.length-x-1
不减1的情况下,x=y=0的时候,y=arr.length-1<arr.length-x,但是y+1就越界了

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
ArrayIndexOutOfBoundsException 这个异常的意思是用非法的索引访问数组,也就是你的30行代码if (arr[y]>arr[y+1])有越界问题发生了了。。刚才我看了看,当循环第一次的时候 按正常的道理来说 当执行第一次外循环的时候执行到  for (int y = 0;y<arr.length-x ;y++ )的时候你此时的x值为0也就是,当y<arr.length就执行循环  此时你的if (arr[y]>arr[y+1])里面的arr[y+1])已经越界,所以抛出 ArrayIndexOutOfBoundsException异常,,我刚才看了看 你是想做选择排序哈, 其实你把
  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;
                                }
                        }
这段改成这样

for (int y = x+1;y<arr.length ;y++ )
                        {
                                if (arr[x]>arr[y])
                                {
                                        int temp = arr[y];
                                        arr[y]=arr[x];
                                        arr[x]=temp;
                                }
                        }

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
public static void bubbleSort(int[] arr)
        {
                for (int x = 0;x <arr.length-1 ;x++ )
                {
                        for (int y = 0;y<arr.length-x ;y++ )    这里数组越界啦,  假设x=0时 y<arr。length   进行内循环  y=arr。length-1时  y+1是不是就超过数组大小了呢                        {                                                  所以在后面再减1就可以了
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y+1]=temp;
                                }
                        }
                }
回复 使用道具 举报
你这个是数组下表越界的异常了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马