黑马程序员技术交流社区

标题: 一个冒泡程序的错误 [打印本页]

作者: 秋天    时间: 2011-11-8 16:28
标题: 一个冒泡程序的错误
本帖最后由 秋天 于 2011-11-8 16:46 编辑

按照书本打了一个冒泡程序
public class MaoPao{
    public static void main(String[] args){
        int[]a=new int[]{13,10,15,4,2,1,28,25,34};//创建一个整数数组a,其值是13,10,15,4,2,1,28,25,34
        int i,t,j;//定义三个整型变量i,t,j.

        System.out.print("排列前的数组为:");
        for(i=0;i<10;i++){//使用for循环语句
                System.out.print(a+" ");//输出数组a的值
        }
        System.out.println("");//换行

        for(j=0;j<9;j++){//外层循环
                for(i=0;i<9;i++){//内层循环
                        if(a>a[i+1]){//如果前一个数大于后一个
                                t=a;//将前一个元素赋值给中间变量t
                                a=a[i+1];//将后一个元素赋值前一个元素
                                a[i+1]=t;//将中间变量t赋值给后一个元素
                        }
                }
        }
        System.out.print("排列后的数组为:");
        for(i=0;1<10;i++){//使用for循环
                System.out.print(a+" ");//输出数组a的值
        }
    }
}





原来少打了一个数据4现在改过来了
       






public class MaoPao{
    public static void main(String[] args){
        int[]a=new int[]{13,10,3,15,4,2,1,28,25,34};//创建一个整数数组a,其值是13,10,15,4,2,1,28,25,34
        int i,t,j;//定义三个整型变量i,t,j.

        System.out.print("排列前的数组为:");
        for(i=0;i<10;i++){//使用for循环语句
                System.out.print(a+" ");//输出数组a的值
        }
        System.out.println("");//换行

        for(j=1;j<9;j++){//外层循环
                for(i=1;i<9;i++){//内层循环
                        if(a>a[i+1]){//如果前一个数大于后一个
                                t=a;//将前一个元素赋值给中间变量t
                                a=a[i+1];//将后一个元素赋值前一个元素
                                a[i+1]=t;//将中间变量t赋值给后一个元素
                        }
                }
        }
        System.out.print("排列后的数组为:");
        for(i=0;1<10;i++){//使用for循环
                System.out.print(a+" ");//输出数组a的值
        }
    }
}       
               



运行发现第二次的数据中第一个没更改   就把
                  for(j=1;j<9;j++){//外层循环
                for(i=1;i<9;i++){//内层循环
                        if(a>a[i+1]){//如果前一个数大于后一个
                                t=a;//将前一个元素赋值给中间变量t
                                a=a[i+1];//将后一个元素赋值前一个元素
                                a[i+1]=t;//将中间变量t赋值给后一个元素
                        }


改为  for(j=0;j<9;j++){//外层循环
                for(i=0;i<9;i++){//内层循环
                        if(a>a[i+1]){//如果前一个数大于后一个
                                t=a;//将前一个元素赋值给中间变量t
                                a=a[i+1];//将后一个元素赋值前一个元素
                                a[i+1]=t;//将中间变量t赋值给后一个元素
                        }


运行之后这样了---------- java ----------
排列前的数组为:13 10 3 15 4 2 1 28 25 34
排列后的数组为:1 2 3 4 10 13 15 25 28 34 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at MaoPao.main(MaoPao.java:23)

输出完毕 (耗时 1 秒) - 正常终止



       
作者: 秋天    时间: 2011-11-8 16:29
编译之后是正常的
作者: 秋天    时间: 2011-11-8 16:29
但运行之后只能输出原来的值  、

QQ截图20111108162933.gif (3.75 KB, 下载次数: 22)

QQ截图20111108162933.gif

作者: 秋天    时间: 2011-11-8 16:34
本帖最后由 秋天 于 2011-11-8 16:34 编辑

改成这样还是错
for(j=1;j<9;j++){//外层循环
                for(i=1;i<9;i++){//内层循环
                        if(a>a[i+1]){//如果前一个数大于后一个
                                t=a;//将前一个元素赋值给中间变量t
                                a=a[i+1];//将后一个元素赋值前一个元素
                                a[i+1]=t;//将中间变量t赋值给后一个元素               
作者: 齐国峰    时间: 2011-11-8 16:34
数组越界吧,提示你第八行.
第8行的应该是  for(i=0;i<9;i++){//使用for循环语句

作者: 秋天    时间: 2011-11-8 16:36
本帖最后由 秋天 于 2011-11-8 16:39 编辑
齐国峰 发表于 2011-11-8 16:34
数组越界吧,提示你第八行.
第8行的应该是  for(i=0;i


第八行是        System.out.print(a+" ");//输出数组a的值  输出语句怎么错了

QQ截图20111108162933.gif (5.14 KB, 下载次数: 15)

QQ截图20111108162933.gif

作者: olkldksl    时间: 2011-11-8 16:47
内循环改成
for(i=0;i<8;i++){//内层循环
因为数组里就9个值,将最大值送到末尾比较8次就行了
多比较一次数组就越界了
作者: 齐国峰    时间: 2011-11-8 16:49
本帖最后由 齐国峰 于 2011-11-8 16:50 编辑
秋天 发表于 2011-11-8 16:36
第八行是        System.out.print(a+" ");//输出数组a的值  输出语句怎么错了


恩,可能是我看错了...
作者: 秋天    时间: 2011-11-8 16:55
olkldksl 发表于 2011-11-8 16:47
内循环改成
for(i=0;i

最后输出前我把for(i=0;i<10;i++){//使用for循环  打成了l<10
作者: 王德云    时间: 2011-11-8 17:44
java.lang.ArrayIndexOutOfBoundsException: 一般报这个错就代表数组越界异常了。





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