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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马巩伟伟 黑马帝   /  2011-12-25 21:01  /  2427 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马巩伟伟 于 2011-12-25 22:02 编辑

public static void method_3()
        {
             int[] arr={1,2,5,7,9,4,11};
             int temp=0;
                 System.out.println("Before sorting is: ");
                 
           for(int i=0;i<arr.length;i++)
           {
                   System.out.print(arr+"   ");//为什么我在这里的输出结果全是1?有一次是把arr的值全打印出来了,可是之后再编译打印的时候就全部是1了,求解!!
              for(int j=i+1;j<arr.length;j++)
                   {
                     
                           if(arr<arr[j])
                           {
                              temp=arr;
                                  arr=arr[j];
                                  arr[j]=temp;
                           }
                  }
           }
           System.out.println();
           System.out.println("After sorted is:  ");
           for(int i=0;i<arr.length;i++)
                {
               System.out.print(arr+"   ");
           }

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

10 个回复

倒序浏览
王冀 黑马帝 2011-12-25 21:05:32
沙发
本帖最后由 王冀 于 2011-12-25 21:08 编辑

你是想在排序之前打印一次?

那么应该把
           for(int i=0;i<arr.length;i++)
                {
               System.out.print(arr+"   ");
           }
在排序前写一次,不能同时打印和排序


public static void method_3()
        {
             int[] arr={1,2,5,7,9,4,11};
             int temp=0;
                 System.out.println("Before sorting is: ");
          for(int i=0;i<arr.length;i++)
           {
               System.out.print(arr+"   ");
           }               
           for(int i=0;i<arr.length;i++)
           {
                   //////////////////////System.out.print(arr+"   ");
              for(int j=i+1;j<arr.length;j++)
                   {
                     
                           if(arr<arr[j])
                           {
                              temp=arr;
                                  arr=arr[j];
                                  arr[j]=temp;
                           }
                  }
           }
           System.out.println();
           System.out.println("After sorted is:  ");
           for(int i=0;i<arr.length;i++)
                {
               System.out.print(arr+"   ");
           }
}

评分

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

查看全部评分

回复 使用道具 举报
王冀 发表于 2011-12-25 21:05
你是想在排序之前打印一次?

那么应该把

我是想知道为什么同时进行的时间为什么会出现这样的结果? 如果能把运行的过程说说的话最好啦。。:)
回复 使用道具 举报
李楠 黑马帝 2011-12-25 21:50:25
板凳
Before sorting is:
1   1   1   1   1   1   1   
After sorted is:  
11   9   7   5   4   2   1  
这是结果吧?
第一个1,是你序列的第一个。
然后数组的第一个arr[0]和第二个arr[1]比,2比1大,换位,现在1到了第二位arr[1].
然后外层循环i+1,又打印arr[1],还是1,依次类推,就一直是1.
但是,一直是1只是因为你的第一个是这个序列最小的一个,所以1在一直被往后退,就一直打印1了。
你换一个字符序列,打印结果就不一样了。
回复 使用道具 举报
李楠 黑马帝 2011-12-25 21:59:20
报纸
如果你想查看排序过程:
  for(int i=0;i<arr.length;i++)
           {
                for(int k:arr){
                  System.out.print(k+"   ");//这里加一个for循环,全部输出。
                     }
                    System.out.println();

                //   System.out.print(arr[i]+"   ");//为什么我在这里的输出结果全是1?有一次是把arr的值全打印出来了,可是之后再编译打印的时候就全部是1了,求解!!
              for(int j=i+1;j<arr.length;j++)
                   {
                     
                           if(arr[i]<arr[j])
                           {
                              temp=arr[i];
                                  arr[i]=arr[j];
                                  arr[j]=temp;
                           }
                  }
           }

给你看一下结果,你就知道为什么一直输出1了。
Before sorting is:
1   2   5   7   9   4   11   
11   1   2   5   7   4   9   
11   9   1   2   5   4   7   
11   9   7   1   2   4   5   
11   9   7   5   1   2   4   
11   9   7   5   4   1   2   
11   9   7   5   4   2   1   

After sorted is:  
11   9   7   5   4   2   1  
你看1的位置、

评分

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

查看全部评分

回复 使用道具 举报
  在执行System.out.print(arr[i]+"   ");时其实你的数组已经被改变了,你输出的数是arr[i]和arr[i-1]中较小的值,因为在内循环进行比较的时候如果arr[i-1]比arr[i]小的话,你就将这两个值进行了交换,而输出的是arr[i-1+1],即arr[i],不知道我这样说,你能看懂吗?

评分

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

查看全部评分

回复 使用道具 举报
李楠 发表于 2011-12-25 21:50
Before sorting is:
1   1   1   1   1   1   1   
After sorted is:  

老兄我明白了,因为我是从大到小排序的,而这个数组里恰恰1是最小的,它总是往后移。也就是说i+1后1同时也向后移了一位,自然取到的就一直是它了。    噢了!!  
回复 使用道具 举报
李楠 发表于 2011-12-25 21:59
如果你想查看排序过程:
  for(int i=0;i

嗯  问题就出在这里了,因为我从大到小排的,而1恰恰是最小的。明白了。。。。。谢谢,你的答案很明确
回复 使用道具 举报
刘忠德 发表于 2011-12-25 21:59
在执行System.out.print(arr+"   ");时其实你的数组已经被改变了,你输出的数是arr和arr中较小的值,因为 ...

你的意思我理解了,非常感谢!!!
回复 使用道具 举报
肖岑锋 黑马帝 2011-12-25 22:26:43
10#
原理说来很简单的。
当外循环i = 0时,内循环排序后数组为11  1  2  5  7  9
当外循环i = 1时,内循环排序后数组为11  9  1  2  5  7
当外循环i = 2时,内循环排序后数组为11  9  7  1  2  5
当外循环i = 3时,内循环排序后数组为11  9  7  5  1  2
当外循环i = 4时,内循环排序后数组为11  9  7  5  2  1

你输出的话,当然全部都是1了。。。。

评分

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

查看全部评分

回复 使用道具 举报
刘小峰 黑马帝 2011-12-26 21:19:43
11#
顶一下上面的额
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马