黑马程序员技术交流社区

标题: 一个排序的简单方法 [打印本页]

作者: 黑马连家华    时间: 2012-2-27 20:45
标题: 一个排序的简单方法
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;
                                }
                        }
                }
        }
又出错了。。。大家看看能不能找到呢?还有,为什么没有人加技术分了呢?
作者: 李晓俊老师    时间: 2012-2-27 20:54
那么x的最大值是array.length-1,在外循环的最后一次,当x=array.length-1时,x++了一次,虽然循环停止,但是
这时候x=array.length了,下面内循环接着y=++x,此时y=array.length+1;呵呵,当然会出数组角标越界的异常啊
作者: 黑马连家华    时间: 2012-2-27 20:58
李晓俊 发表于 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+",");
                }
        }
这个是输出数组的,
这个呢?
作者: dangfei    时间: 2012-2-27 21:01
for (int y = ++x;y < array.length;y++)把y=++x,改为y=x+1就没事了吧。至于技术分的问题,我就不做过多解释了。都想啊......
作者: 李晓俊老师    时间: 2012-2-27 21:01
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+",");

作者: 冯兵兵    时间: 2012-2-27 21:02
这是冒泡循环吧,内层for循环条件y<array.length写错了吧,应该写成y<array.length-x-1。再试试
作者: 冯兵兵    时间: 2012-2-27 21:02
打错了,冒泡排序才对{:soso_e100:}
作者: 杨盼    时间: 2012-2-27 21:03
for (int y = ++x;y < array.length;y++)
加重的地方错了,这里运算++x,那么下面的x也会相应的变化,如果在这个循环中打印出x的话是1,3,5,7·····这样的数字,所以排序错误
作者: 黑马连家华    时间: 2012-2-27 21:05
谢谢大家咧!
作者: 黑马连家华    时间: 2012-2-27 21:08
冯兵兵 发表于 2012-2-27 21:02
这是冒泡循环吧,内层for循环条件y

你这个不对哦,你这样改的话,前面的y的赋值也是要改的
作者: 黑马连家华    时间: 2012-2-27 21:10
李晓俊 发表于 2012-2-27 21:01
因为要输出的是数组中的元素,不是数组
System.out.println(array+"}");
改为System.out.println(array+"} ...

你这个。。我看不懂啊..
作者: 李晓俊老师    时间: 2012-2-27 21:16
Noword 发表于 2012-2-27 21:10
你这个。。我看不懂啊..

System.out.println(array+"}");
改为System.out.println(array+"}");
System.out.print(array+",");
改为 System.out.print(array+",");
难道我中括号没打进去...汗
作者: 李晓俊老师    时间: 2012-2-27 21:18
还真是打不进去啊,算了我写吧
System.out.println(array+"}");改为 System.out.println(array[i]+"}");
System.out.print(array+",");改为System.out.println(array[i]+",");
作者: 黑马连家华    时间: 2012-2-27 21:18
李晓俊 发表于 2012-2-27 21:16
System.out.println(array+"}");
改为System.out.println(array+"}");
System.out.print(array+",");

你就是没打中括号~
作者: 黑马连家华    时间: 2012-2-27 21:19
谢谢大家,问题已经解决了




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