黑马程序员技术交流社区

标题: 排序问题求助(结果不正确) [打印本页]

作者: 黑马张扬    时间: 2012-6-1 23:38
标题: 排序问题求助(结果不正确)
本帖最后由 黑马张扬 于 2012-6-1 23:41 编辑
  1. class  StudentDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Student stu = new Student("zhangyang",24,80);
  6.                 Student stu1 = new Student("liyang",24,90);
  7.                 Student stu2 = new Student("wangyang",24,78);
  8.                 Student stu3 = new Student("langyang",24,66);
  9.                 Student stu4 = new Student("hangyang",24,89);
  10.                 Student[] arr = {stu,stu1,stu2,stu3,stu4};
  11.                 for (int i = 0;i<arr.length ;i++ )
  12.                 {
  13.                         for(int j = i;j<arr.length-1;j++)
  14.                         {
  15.                                 if (arr[j].getExam()<arr[j+1].getExam())
  16.                                 {
  17.                                         Student temp = arr[j];
  18.                                         arr[j] = arr[j+1];
  19.                                         arr[j+1] = temp;
  20.                                 }
  21.                         }
  22.                 }
  23.                 System.out.println("学生按成绩排序");
  24.                 for (int i=0;i<arr.length ;i++ )
  25.                 {
  26.                         System.out.println("第"+(i+1)+"名:"+arr[i].getName()+" 成绩:"+arr[i].getExam());
  27.                 }



  28.                
  29.         }
  30.         
  31. }


  32. class Student
  33. {
  34.         Student(){}
  35.         Student(String name,int age,int exam)
  36.         {
  37.                 this.name=name;
  38.                 this.age=age;
  39.                 this.exam=exam;
  40.         }
  41.         private String name;
  42.         private int age;
  43.         private int exam;

  44.         public void setName(String name)
  45.         {
  46.                 this.name = name;
  47.         }

  48.         public String getName()
  49.         {
  50.                 return name;
  51.         }

  52.         public void setAge(int age)
  53.         {
  54.                 this.age = age;
  55.         }

  56.         public int getAge()
  57.         {
  58.                 return age;
  59.         }

  60.         public void setExam(int exam)
  61.         {
  62.                 this.exam = exam;
  63.         }

  64.         public int getExam()
  65.         {
  66.                 return exam;
  67.         }
  68. }
复制代码

作者: 刘伯阳    时间: 2012-6-1 23:39
本帖最后由 刘伯阳 于 2012-6-2 00:08 编辑

找到问题了,你在排序的时候,
应该是拿第一层for循环的i值去与第二层的每一个值去比较,而不是拿第二层的两个值比较。你的比较里面完全与 i 脱离了关系,改为这样:
for (int i = 0;i<arr.length ;i++ )
                {
                        for(int j = i;j<arr.length-1;j++)
                        {
                                if (arr.getExam()<arr[j].getExam())
                                {
                                        Student temp = arr[j];
                                        arr[j] = arr;
                                        arr = temp;
                                }
                        }
                              
                }


作者: 黑马张扬    时间: 2012-6-1 23:42
排出来的结果不对!~
作者: 丰亚彬    时间: 2012-6-1 23:51
你的排序算法出错了,我把代码给你贴过去你看看吧
  1. class Sort
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Student stu = new Student("zhangyang",24,80);
  6.                 Student stu1 = new Student("liyang",24,90);
  7.                 Student stu2 = new Student("wangyang",24,78);
  8.                 Student stu3 = new Student("langyang",24,66);
  9.                 Student stu4 = new Student("hangyang",24,89);
  10.                 Student[] arr = {stu,stu1,stu2,stu3,stu4};
  11.                 for (int i = 0;i<arr.length;i++ )
  12.                 {
  13.                         for(int j = i+1;j<arr.length;j++)
  14.                         {
  15.                                 if (arr[j].getExam()<arr[i].getExam())
  16.                                 {
  17.                                         Student temp = arr[j];
  18.                                         arr[j] = arr[i];
  19.                                         arr[i] = temp;
  20.                                 }
  21.                         }
  22.                 }
  23.                 System.out.println("学生按成绩排序");
  24.                 for (int i=0;i<arr.length ;i++ )
  25.                 {
  26.                         System.out.println("第"+(i+1)+"名:"+arr[i].getName()+" 成绩:"+arr[i].getExam());
  27.                 }



  28.                
  29.         }
  30.         
  31. }


  32. class Student
  33. {
  34.         Student(){}
  35.         Student(String name,int age,int exam)
  36.         {
  37.                 this.name=name;
  38.                 this.age=age;
  39.                 this.exam=exam;
  40.         }
  41.         private String name;
  42.         private int age;
  43.         private int exam;

  44.         public void setName(String name)
  45.         {
  46.                 this.name = name;
  47.         }

  48.         public String getName()
  49.         {
  50.                 return name;
  51.         }

  52.         public void setAge(int age)
  53.         {
  54.                 this.age = age;
  55.         }

  56.         public int getAge()
  57.         {
  58.                 return age;
  59.         }

  60.         public void setExam(int exam)
  61.         {
  62.                 this.exam = exam;
  63.         }

  64.         public int getExam()
  65.         {
  66.                 return exam;
  67.         }
  68. }
复制代码

作者: 杜俊彪    时间: 2012-6-2 00:12
确实是排序出了问题,不过楼上的说法也错了,数组指标越界了;   
我改了下,  楼主可以看下;
  1. for (int i = 0;i<arr.length-1 ;i++ )
  2.                 {
  3.                         for(int j = 0;j<arr.length-1;j++)
  4.                         {
  5.                                 if (arr[j].getExam()>arr[j+1].getExam())
  6.                                 {
  7.                                         Student temp = arr[j];
  8.                                         arr[j] = arr[j+1];
  9.                                         arr[j+1] = temp;
  10.                                 }
  11.                         }
  12.                 }
  13.                 System.out.println("学生按成绩排序");
  14.                 for (int i=4,j=0;i>=0 ;i-- ,j++)
  15.                 {
  16.                         System.out.println("第"+(j+1)+"名:"+arr[i].getName()+" 成绩:"+arr[i].getExam());
  17.                 }
复制代码

作者: 古银平    时间: 2012-6-2 00:23
本帖最后由 古银平 于 2012-6-2 00:26 编辑

也可以使用冒泡排序,对数组排序的都可以,可以看看API文挡的排序方法,直接调用也行
  1. class  StudentDemo

  2. {

  3.         public static void main(String[] args)
  4.         {
  5.                         Student arr[] =                         //定义学生的引用类型
  6.             {  
  7.                 new Student("zhangyang",24,80),   
  8.                 new Student("liyang",24,90),  
  9.                 new Student("wangyang",24,78),  
  10.                 new Student("langyang",24,66),  
  11.                 new Student("hangyang",24,89)  
  12.             };  


  13.                /*
  14.                            把这个初始化到一个Student 类型的数组里
  15.                            Student stu = new Student("zhangyang",24,80);

  16.                 Student stu1 = new Student("liyang",24,90);

  17.                 Student stu2 = new Student("wangyang",24,78);

  18.                 Student stu3 = new Student("langyang",24,66);

  19.                 Student stu4 = new Student("hangyang",24,89);

  20.                 Student[] arr = {stu,stu1,stu2,stu3,stu4};
  21.                                 */
  22.                                 Student temp; //学生类型的变量,用于交换数组元素。

  23.                 for (int i = 0; i<arr.length; i++)        //对成绩进行排序
  24.                                 {  
  25.                                         for (int j=i+1; j<arr.length; j++)  
  26.                                     {  
  27.                       if (arr[i].getExam()<arr[j].getExam())  //排序语句,我这里用选择排序
  28.                       {  
  29.                            temp = arr[i];  
  30.                            arr[i] = arr[j];  
  31.                            arr[j] = temp;  
  32.                       }  
  33.                    }  


  34.                 }

  35.                 System.out.println("学生按成绩排序");

  36.                 for (int i=0;i<arr.length ;i++ )

  37.                 {

  38.                         System.out.println("第"+(i+1)+"名:"+arr[i].getName()+" 成绩:"+arr[i].getExam());

  39.                 }




  40.                
  41.         }

  42.         

  43. }



  44. class Student

  45. {

  46.         Student(){}

  47.         Student(String name,int age,int exam)

  48.         {

  49.                 this.name=name;

  50.                 this.age=age;

  51.                 this.exam=exam;

  52.         }

  53.         private String name;

  54.         private int age;

  55.         private int exam;


  56.         public void setName(String name)

  57.         {

  58.                 this.name = name;

  59.         }


  60.         public String getName()

  61.         {

  62.                 return name;

  63.         }


  64.         public void setAge(int age)

  65.         {

  66.                 this.age = age;

  67.         }


  68.         public int getAge()

  69.         {

  70.                 return age;

  71.         }


  72.         public void setExam(int exam)

  73.         {

  74.                 this.exam = exam;

  75.         }


  76.         public int getExam()

  77.         {

  78.                 return exam;

  79.         }

  80. }
复制代码

作者: 袁錦泰    时间: 2012-6-2 00:30
杜俊彪 发表于 2012-6-2 00:12
确实是排序出了问题,不过楼上的说法也错了,数组指标越界了;   
我改了下,  楼主可以看下; ...

楼上的代码并没有问题啊。
作者: 黑马张扬    时间: 2012-6-2 00:35
袁錦泰 发表于 2012-6-2 00:30
楼上的代码并没有问题啊。

我有点晕了
作者: 杜俊彪    时间: 2012-6-2 00:38
袁錦泰 发表于 2012-6-2 00:30
楼上的代码并没有问题啊。

不好意思,  确实没问题!{:2_36:}
作者: 袁錦泰    时间: 2012-6-2 00:51
黑马张扬 发表于 2012-6-2 00:35
我有点晕了

排序方式有许多,你可以看看他们修改过的代码,然后按照顺序读一次,应该就可以理解了.




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