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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-10-14 18:24  /  1232 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 2013-10-14 20:05 编辑

class a
{
        public static void main(String[] args)
        {
                int[] arr = {2,1,3,8,6,9,5};
               
                for(int x = 0; x < arr.length; x++)
                {
                        int y;
                        
                        for(y = 0; y < arr.length-x-1; y++)
                        {
                                if(arr[y] > arr[y+1])
                                {
                                        int s = arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = s;
                                }
                        }
                        
                        System.out.println(arr[y]);
                }
        }
}
请问为什么打印出来的是从大到小排序的顺序啊,我认为是从小到大排序才对啊?

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

5 个回复

倒序浏览
  1. if(arr[y] > arr[y+1])
  2. {
  3.     int s = arr[y];
  4.     arr[y] = arr[y+1];
  5.     arr[y+1] = s;
  6. }
复制代码
这段代码是说,如果数组里前面的数大于后面的那个数,那么二者互换,这样就把小的数换到了前面。你用了两个循环,这样就把所有的数组元素都遍历比较一边,所以最后会是从小到大输出。希望能帮助你理解{:soso_e100:}

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
问题在于你将int y 定义在了内循环外
public class a {
        public static void main(String[] args) {
                int[] arr = { 2, 1, 3, 8, 6, 9, 5 };

                for (int x = 0; x < arr.length; x++) {
                        int y;

                        for (y = 0; y < arr.length - x - 1; y++) {
                                if (arr[y] > arr[y + 1]) {
                                        int s = arr[y];
                                        arr[y] = arr[y + 1];
                                        arr[y + 1] = s;
                                }
                        }
                        System.out.println(y);
                        //System.out.println(arr[y]);
                }
        }
}
输出为
6
5
4
3
2
1
0
也就是说你每次内循环好后将数组从小到大排列了,但是你每次输出都是从数组的末尾来输出。而且实际上从第二次内循环开始,你都是在做无用功。
下面是一种正确的代码。
public class A {
        public static void main(String[] args) {
                int[] arr = { 2, 1, 3, 8, 6, 9, 5 };

                for (int x = 0; x < arr.length; x++) {
                        //int y;

                        for (int y = 0; y < arr.length - x - 1; y++) {
                                if (arr[y] > arr[y + 1]) {
                                        int s = arr[y];
                                        arr[y] = arr[y + 1];
                                        arr[y + 1] = s;
                                }
                        }
                        System.out.println(arr[x]);
                        //System.out.println(y);
                        //System.out.println(arr[y]);
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-14 19:25:37
板凳
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
package seventeen;
import java.util.Arrays;
public class a {
        public static void main(String[] args) {
                 int[] arr = {2,1,3,8,6,9,5};
                 System.out.println("     "+Arrays.toString(arr));  
        for(int x = 0; x < arr.length; x++)
         {
                 int y;
                 for( y = 0; y < arr.length-x-1; y++)
                 {
                         if(arr[y] > arr[y+1])
                         {
                                 int s = arr[y];
                                 arr[y] = arr[y+1];
                                 arr[y+1] = s;
                         }                        
                 }
               
                 System.out.print(arr[y]+"   ");         
                 System.out.println(Arrays.toString(arr));
         }
     
        }
}
输出的结果为:

    [2, 1, 3, 8, 6, 9, 5]
9   [1, 2, 3, 6, 8, 5, 9]
8   [1, 2, 3, 6, 5, 8, 9]
6   [1, 2, 3, 5, 6, 8, 9]
5   [1, 2, 3, 5, 6, 8, 9]
3   [1, 2, 3, 5, 6, 8, 9]
2   [1, 2, 3, 5, 6, 8, 9]
1   [1, 2, 3, 5, 6, 8, 9]
仔细分析【】号中的元素是一个接一个的比较,由于y++的缘故等比较最后一个是其元素角标为arr[y],这时
arr[y]以比较完它的结果以确定,输出arr[y],此时的arr[y]就是数组中的最后一个元素。
我表达的不清楚,希望你能领悟。
回复 使用道具 举报
太谢谢各位了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马