黑马程序员技术交流社区

标题: 这段代码有疑问 [打印本页]

作者: 完美恋爱    时间: 2013-10-26 15:55
标题: 这段代码有疑问
本帖最后由 完美恋爱 于 2013-10-26 18:48 编辑

class Demo
{
        public static void sort(int[] arr)
        {
                for(int x = 0; x < arr.length; x++)
                {
                        for(int y = x+1; y < arr.length-1; y++)
                        {
                                int num = 0;
                                if(arr[x] > arr[y])
                                {
                                        num = arr[y];
                                        arr[y] = arr[x];
                                        arr[x] = num;
                                }
                        }
                }
        }
        
        public static void array(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 main(String[] args)
        {
                int[] arr = {3,1,4,7,5,2,6};
               
                array(arr);
                sort(arr);
                array(arr);
        }
}

请问为什么排完序结果不是[3,1,4,7,5,2,6]
                                          [1,2,3,4,5,6,7]
                                   而是[3,1,4,7,5,2,6]
                                          [1,2,3,4,5,7,6]
这是怎会回事啊?


作者: Y_Y    时间: 2013-10-26 16:11
是不是里面的for循环的条件:  for(int y = x+1; y < arr.length-1; y++)  不该减一!
作者: 1961993790    时间: 2013-10-26 16:24
正确代码如下:
class Demo {
        public static void sort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) {
                        for (int y = x + 1; y < arr.length; y++) {
                                int num = 0;
                                if (arr[x] > arr[y]) {
                                        num = arr[y];
                                        arr[y] = arr[x];
                                        arr[x] = num;
                                }
                        }
                }
        }

        public static void array(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 main(String[] args) {
                int[] arr = { 3, 1, 4, 7, 5, 2, 6 };

                array(arr);
                sort(arr);
                array(arr);
        }
}
你的错误之处为:for(int y = x+1; y < arr.length-1; y++)  
这里的y表示要判断的次数,举个例子,如果n个数进行比较,比较的
次数应该为:n-1;
希望对您有帮助。
作者: 完美恋爱    时间: 2013-10-26 16:32
1961993790 发表于 2013-10-26 16:24
正确代码如下:
class Demo {
        public static void sort(int[] arr) {

看来不加你Q是不行了啊!哈哈
作者: 李文帅    时间: 2013-10-26 17:49
你的代码错误在于
1、“for(int y = x+1; y < arr.length-1; y++)”,想想看,x是两个比较元素的第一个,y是第二个,而y>x并且y<rr.length-1,这样的话y始终取不到最后一个元素,
    所以程序只能把数组中除了最后一个元素的其他元素进行排序,所以应该把循环条件改为"y<arr.length"
2、还有我认为应该把"<arr.length“改为"arr.length-1",这样可以减少一次循环
  1. class Demo {
  2.         public static void sort(int[] arr)
  3.     {
  4.                 for(int x = 0; x < arr.length-1; x++){
  5.                         for(int y = x+1; y < arr.length; y++){
  6.                                 int num = 0;
  7.                 if(arr[x] > arr[y]){
  8.                         num = arr[y];
  9.                     arr[y] = arr[x];
  10.                     arr[x] = num;
  11.                 }
  12.             }
  13.         }
  14.     }
  15. }
复制代码





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