黑马程序员技术交流社区

标题: 帮忙解决!谢谢! [打印本页]

作者: 黑马张平    时间: 2012-3-10 21:36
标题: 帮忙解决!谢谢!
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)
作者: 倪鹏博    时间: 2012-3-10 22:03
本帖最后由 倪鹏博 于 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就越界了
作者: 付鹏    时间: 2012-3-10 22:54
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;
                                }
                        }
作者: 贠(yun)靖    时间: 2012-3-11 00:31
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;
                                }
                        }
                }

作者: lucky_xingxing    时间: 2012-3-11 09:27
你这个是数组下表越界的异常了




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