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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 廿乙木 中级黑马   /  2014-8-11 21:57  /  1890 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
*第二题: 请列举您了解的一些排序算法,并用Java语言实现一个效率较高的。
* 答:我知道的有选择排序法,冒泡排序法,还有快速排序法
* 以下是我自己写的冒泡排序法。
*/

package com.itheima;

public class Text2 {
        /* 打印函数 */
        public static void sop(Object obj) {
                System.out.println(obj);
        }

        /* 打印数组函数 */
        public static void show(int arr[]) {
                for (int x = 0; x < arr.length; x++)
                        sop(arr[x]);
        }

        public static void main(String[] args) {
                int arr[] = { 1, 5, 3, 9, 0, 6, 8, 9, 4 };// 定义一个一维数组

                show(arr);// 打印原数组
                for (int i = 0; i <= arr.length - 1; i++) {// 外循环
                        for (int j = 0; j <= arr.length - i - 1; j++) {// 内循环相邻比较

                                if (arr[j] < arr[j + 1]) {// 通过一次循环将最大的元素放最后
                                        int temp = arr[j];
                                        arr[j] = arr[j + 1];
                                        arr[j + 1] = temp;
                                }
                        }
                }
                show(arr);

        }
}
错误提示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
        at com.itheima.Text2.main(Text2.java:27)

求解答

14 个回复

倒序浏览
哎。自己解决了,把《=换成《就好了。
回复 使用道具 举报

  1. for (int i = 0; i <= arr.length - 1; i++) {//这里不需要=号,应为只需要比较到倒数第二位
  2.                                 //如果你这样的话,当你i=0,下面的j=arr.length-1,那么j+1就越界了
  3.         for (int j = 0; j <= arr.length - i - 1; j++) {
  4.                     if (arr[j] < arr[j + 1]) {
  5.                              int temp = arr[j];
  6.                              arr[j] = arr[j + 1];
  7.                              arr[j + 1] = temp;
  8.              }
  9.        }
  10. }
复制代码

回复 使用道具 举报 1 0
   for (int j = 0; j <= arr.length - i - 1; j++) {// 内循环相邻比较
条件判断错了  数组交表越界异常。 改成  j < arr.length - i - 1就行了
不然下面判断arr[j + 1]的时候发生越界
回复 使用道具 举报
for (int i = 0; i <= arr.length - 1; i++) {//这里不需要=号,应为只需要比较到倒数第二位
                                //如果你这样的话,当你i=0,下面的j=arr.length-1,那么j+1就越界了
        for (int j = 0; j <= arr.length - i - 1; j++)
二楼回答的不是很全,即使i不等于arr.length - 1,但它还是可以等于0,那么j还是有可能等于arr.length - 1,因为下面有用到j+1,这样j就会出现数组角标越界异常。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
回复 使用道具 举报
所以j角标也不能等于arr.length - i - 1。
回复 使用道具 举报
这个是数组越界的问题!
回复 使用道具 举报
才看完的 竟然不会。。。
回复 使用道具 举报
:L  =。。。。。
回复 使用道具 举报
for (int i = 0; i <= arr.length - 1; i++) //越界了
回复 使用道具 举报
那个错误原因是判断语句中的a[j]>a[j+1],因为你的j取值范围最大为arr.length,再+1就会超限,该改为a[i]>a[j]。并且有重复比较,外循环改为for(int i=0;i<arr.length-1;i++)内循环该改为for(int j=i+1;j<arr.length;j++)
回复 使用道具 举报
楼主是没明白里面具体的实现过程吧!
回复 使用道具 举报
学习了                                                              
回复 使用道具 举报
数组长度越界
回复 使用道具 举报
。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马