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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李深山 中级黑马   /  2012-3-18 22:19  /  2768 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  SortDemo2
{
        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (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(Integer i:arr)
                System.out.println(i);
        }
}
为什么总是出现角标越界?

7 个回复

倒序浏览
第二个for循环的条件应该是 y<arr.length-1-x
回复 使用道具 举报
哦,中啦,谢谢
回复 使用道具 举报
class  SortDemo2
{
        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-x;y++)//这句应该是:for(y=0;y<arr.length-x-1;y++)
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                System.out.println(i);
        }
}
回复 使用道具 举报
class  SortDemo2
{
        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-x;y++)  //因为你交换的时候  是y 和y+1 交换   如果控制范围不 减1的话  y+1最后就等于arr.length了  所以就越界
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                System.out.println(i);
        }
}
回复 使用道具 举报
你仔细想想当x=6的时候,进行内循环的时候,是不是只有最后两个元素了?那么这个地方还用得着内循环多一次循环吗?多了一次,y++是不是就多增了一次,所以越界。应该是for(y=0;y<arr.length-x-1;y++),你在看看是不是这样的。
回复 使用道具 举报
class   SortDemo2 {

        public static void main(String[] args)
        {
                Arr();
        }

        public static void Arr()
        {
                int [] arr = {1,23,15,17,9,11,13,15};
                int y = 0;
                for (int x =0;x<arr.length-1;x++)
                {
                        for (y=0;y<arr.length-1-x;y++)  //这里要减for(y = 0; y < arr.length - 1 - i; y++)
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                }
                        }
                }
                for(Integer i:arr)
                        System.out.println(i);
        }
因为冒泡排序是两个相邻的去比较,找到最大的放在最后,  所以第一次为0号索引到length-2号索引相邻的去比较(数组长度为length-1, 到最后是倒数第二个和最后一个比), 第二次是从0号索引到length-3号索引相邻的去比较(第一次已经找到最大的了, 所以第二次比较出最大的放在倒数第二个位置上)......因为找到最大的放在最后, 所以要第一次比较是length-1,第二次为length-2...... ;
回复 使用道具 举报
我运行之后出现的问题是Exception in thread "main" java.lang.NoClassDefFoundError错误
查询后是这个问题。改成classpath后成功
http://user.qzone.qq.com/837678379/blog/1332091002#!app=2我的QQ空间里有这次的收藏知识点分享。希望有用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马