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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 曹俊 于 2012-5-19 17:15 编辑


大家请帮我看下这个程序,问题都在7,8,9行。问题1:第9行,我注释//Shunxu(arry);   打印出的显示是[5,1,6,4,2,8,9]   我明明调用了13行的方法,为什么没有打印出我排序后的内容?
                                                                       问题2:第7行,我注释//Shunxu(arry);   打印出的显示是[1,2,4,5,6,8,9]   而第9行也调用了Shunxu(arry);方法,为什么木有打印出[5,1,6,4,2,8,9] 呢?
总的来说,我的问题就是对7,8,9行的用意不太理解,高手们,求给我个思路清晰,明确的答案,好嚒?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加油···

查看全部评分

6 个回复

倒序浏览
本帖最后由 袁錦泰 于 2012-5-19 17:27 编辑

public class SelectSort {

    public static void main(String[] args) {

        int[] arr = { 5, 1, 6, 4, 2, 8, 9 };
        printArray(arr);//先打印原数组
        selectSort(arr);//再调用排序功能
        printArray(arr);//最后打印被排序后的数组(先调用打印方法打印的是原数组,再调用排序功能后打印的当然是被排序后的数组,无论先后他们操作的都是一个数组对象)
    }

    public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {//数组中最后一个元素无需进行比较,你没有留意这一点
            for (int j = i + 1; j < arr.length; j++) {
                if (arr > arr[j]) {
                    swap(arr, i, j);//位置置换应单独定义一个私有方法
                }
            }
        }

    }

    private static void swap(int[] arr, int i, int j) {

        arr = arr ^ arr[j];
        arr[j] = arr ^ arr[j];
        arr = arr ^ arr[j];
    }

    public static void printArray(int[] arr) {

        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1) {
                System.out.print(arr + ",");
            } else {
                System.out.println(arr + "]");
            }
        }
    }

}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
大家请帮我看下这个程序,问题都在7,8,9行。问题1:第9行,我注释//Shunxu(arry);   打印出的显示是[5,1,6,4,2,8,9]   我明明调用了13行的方法,为什么没有打印出我排序后的内容?
                                                                       问题2:第7行,我注释//Shunxu(arry);   打印出的显示是[1,2,4,5,6,8,9]   而第9行也调用了Shunxu(arry);方法,为什么木有打印出[5,1,6,4,2,8,9] 呢?
总的来说,我的问题就是对7,8,9行的用意不太理解,高手们,求给我个思路清晰,明确的答案,好嚒?
回复 使用道具 举报
本帖最后由 Fc10232 于 2012-5-19 17:03 编辑

你写的有很多可以修改的地方:int [] array ={5,1,6,4,2,8,9};   可以这样写的

还有输出的时候就输出,不要判断,就好比睡觉的时候不要想着看书,看书的时候不要想着睡觉
下面是我写的代码    仅供参考
  1. public class Demo02 {
  2.         public static void main(String[] args) {
  3.                 int[] array = { 5, 1, 6, 4, 2, 8, 9 };
  4.                 System.out.println("排序之前!");
  5.                 shunxu(array); // 这个是排序之前
  6.                 paixu(array);  //排序
  7.                 System.out.println();//换行
  8.                 System.out.println("排序之后");
  9.                 shunxu(array);//再次打印

  10.         }

  11.         public static void paixu(int[] b) {
  12.                 for (int i = 0; i < b.length; i++) {
  13.                         for (int j = 1; j < b.length; j++) {
  14.                                 if (j <i) {
  15.                                         int temp = 0;
  16.                                         temp = b;
  17.                                         b = b[j];
  18.                                         b[j] = temp;
  19.                                 }
  20.                         }
  21.                 }

  22.         }

  23.         public static void shunxu(int[] a) {
  24.                 for (int i : a) {
  25.                         System.out.print(i + "、");
  26.                 }

  27.         }

  28. }
复制代码
可以达到你想要的效果
回复 使用道具 举报
本帖最后由 任睦强 于 2012-5-19 17:11 编辑

package com.my.lianxi;


public class xxx {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[] num = new int[]{5,1,6,4,2,8,9};
                ck(num);//这是你打印排序前的 顺序
                ck1(num);//这是你通过左手换右手的方法把这个数组从小到大排序
                ck(num);//这是你打印排序后的 顺序

        }
        public static void ck(int[] num)
        {
                for(int i:num){
                        System.out.print(i+",");
                }
                System.out.println();
        }
        public static void ck1(int[] num)
        {
                for (int i = 0; i < num.length; i++) {
                        for (int j = i+1; j < num.length; j++) {
                                if(num>num[j])
                                {
                                        int temp;
                                        temp=num;
                                        num=num[j];
                                        num[j]=temp;
                                }
                        }
                }
        }
}
回复 使用道具 举报
Shunxu这个方法就是打印这个数组的内容
Paixu这个方法是把这个数组给排序
第7行是先打印没有排序的内容
第8行是排序
排序完成了,已经,所有第9行打印直接就是排序完成的内容了
回复 使用道具 举报
陈栋 初级黑马 2012-5-19 17:14:11
7#
首先数组是引用类型传值的;
问题1:你注释第九行,你第七行打印出原数组没有排序的内容;
问题2:你注视第七行,你第八行调用排序方法,数组已经排序,所以第九行使用shunxu方法输出的是排序后数组的内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马