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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马连家华 中级黑马   /  2012-2-27 20:45  /  2175 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void arraySort(int[] array)
        {
                for (int x = 0;x < array.length-1;x++)
                {
                        for (int y = ++x;y < array.length;y++)
                        {
                                if (array[x] > array[y])
                                {
                                        int temp = array[x];
                                        array[x] = array[y];
                                        array[y] = temp;
                                }
                        }
                }
        }
又出错了。。。大家看看能不能找到呢?还有,为什么没有人加技术分了呢?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

14 个回复

倒序浏览
那么x的最大值是array.length-1,在外循环的最后一次,当x=array.length-1时,x++了一次,虽然循环停止,但是
这时候x=array.length了,下面内循环接着y=++x,此时y=array.length+1;呵呵,当然会出数组角标越界的异常啊

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李晓俊 发表于 2012-2-27 20:54
那么x的最大值是array.length-1,在外循环的最后一次,当x=array.length-1时,x++了一次,虽然循环停止,但是
这 ...

public static void arrayPrint(int [] array)
        {
                System.out.print("{");
                for (int i = 0;i < array.length;i++)
                {
                        if (i == array.length-1)
                        {
                                System.out.println(array+"}");
                                System.out.println("\n=====================================");
                                return;
                        }
                        else
                                System.out.print(array+",");
                }
        }
这个是输出数组的,
这个呢?
回复 使用道具 举报
for (int y = ++x;y < array.length;y++)把y=++x,改为y=x+1就没事了吧。至于技术分的问题,我就不做过多解释了。都想啊......
回复 使用道具 举报
Noword 发表于 2012-2-27 20:58
public static void arrayPrint(int [] array)
        {
                System.out.print("{");

因为要输出的是数组中的元素,不是数组
System.out.println(array+"}");
改为System.out.println(array+"}");
System.out.print(array+",");
改为 System.out.print(array+",");
回复 使用道具 举报
这是冒泡循环吧,内层for循环条件y<array.length写错了吧,应该写成y<array.length-x-1。再试试
回复 使用道具 举报
打错了,冒泡排序才对{:soso_e100:}
回复 使用道具 举报
杨盼 中级黑马 2012-2-27 21:03:48
8#
for (int y = ++x;y < array.length;y++)
加重的地方错了,这里运算++x,那么下面的x也会相应的变化,如果在这个循环中打印出x的话是1,3,5,7·····这样的数字,所以排序错误

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
谢谢大家咧!
回复 使用道具 举报
冯兵兵 发表于 2012-2-27 21:02
这是冒泡循环吧,内层for循环条件y

你这个不对哦,你这样改的话,前面的y的赋值也是要改的
回复 使用道具 举报
李晓俊 发表于 2012-2-27 21:01
因为要输出的是数组中的元素,不是数组
System.out.println(array+"}");
改为System.out.println(array+"} ...

你这个。。我看不懂啊..
回复 使用道具 举报
Noword 发表于 2012-2-27 21:10
你这个。。我看不懂啊..

System.out.println(array+"}");
改为System.out.println(array+"}");
System.out.print(array+",");
改为 System.out.print(array+",");
难道我中括号没打进去...汗
回复 使用道具 举报
还真是打不进去啊,算了我写吧
System.out.println(array+"}");改为 System.out.println(array[i]+"}");
System.out.print(array+",");改为System.out.println(array[i]+",");
回复 使用道具 举报
李晓俊 发表于 2012-2-27 21:16
System.out.println(array+"}");
改为System.out.println(array+"}");
System.out.print(array+",");

你就是没打中括号~
回复 使用道具 举报
谢谢大家,问题已经解决了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马