Student为学生类,ItClass为班级类public class Student implements Comparable<Student> {
private int id;
private String name;
private int age;
private int hight;
private int classId;
private boolean flag;

public Student(int id, String name, int age, int hight) {
this.id = id;
this.name = name;
this.age = age;
this.hight = hight;
this.classId = 0;
this.flag = false;
}

public int getAge() {
return age;
}
public int getClassId() {
return classId;
}
public void setClassId(int classId) {
this.classId = classId;
}
public void setAge(int age) {
this.age = age;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public int getHight() {
return hight;
}
public void setHight(int hight) {
this.hight = hight;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public String toString() {
String stuInfo = "学号:" + id + " 姓名:" + name +
" 年龄:" + age + " 身高:" + hight + " 班级编号:" + classId
+ " 是否在读:" + flag;
return stuInfo;
}

public void tui() {
this.flag = false;
}
public int compareTo(Student s) {
return this.getHight() - s.getHight();
}

}public class ItClass {
private int id;
private String name;
private Student[] stu;

public Student[] getStu() {
return stu;
} public void setStu(Student[] stu) {
this.stu = stu;
} public ItClass(int id, String name, int studentCount) {
this.id = id;
this.name = name;
stu = new Student[studentCount];
}

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public void kill(Student stu) {
stu.setFlag(false);
for(int i=0; i<this.stu.length; i++) {
if(this.stu[i] != null && this.stu[i].isFlag() == false) {
this.stu[i] = null;
}
}
} public String toString() {
String classInfo = "班级编号:" + id + " 班级名称:" + name + " 班级额定人数:" + stu.length;
return classInfo;
}

public void addStudent(Student s) {

for(int i=0; i<stu.length; i++) {
if(stu[i] == null || stu[i].isFlag() == false) {
stu[i] = s;
stu[i].setFlag(true);
stu[i].setClassId(this.id);
return;
}
}
}

public Student search(int id) {
for(int i=0; i<stu.length; i++) {
if(stu[i] != null && stu[i].getId() == id) {
return stu[i];
}
}
return null;
}
}

解决方案 »

  1.   


    import java.util.Arrays;import com.StuManager.ItClass;
    import com.StuManager.Student;public class StuManager {

    static ItClass[] classes = new ItClass[2];

    public static void main(String[] args) {
    classes[0] = new ItClass(1, "Java1101", 5);
    classes[1] = new ItClass(2, ".NET1102", 5);
    System.out.println(Arrays.toString(classes));

    Student[] stu = new Student[4];

    stu[0]= new Student(1001, "Jack", 22, 180);
    stu[1]= new Student(1002, "Rose", 20, 165);
    stu[2]= new Student(1003, "Sara", 21, 163);
    stu[3]= new Student(1004, "Tony", 24, 178);
    System.out.println();

    for(int i=0; i<stu.length; i++) {
    classes[0].addStudent(stu[i]);
    } Arrays.sort(stu);
    System.out.println(Arrays.toString(classes[0].getStu()));
    }
    }
    我的目的是想让学生信息根据身高从小到大排列出来然后打印班级里面学生信息,但是运行结果如下:
    [班级编号:1 班级名称:Java1101 班级额定人数:5, 班级编号:2 班级名称:.NET1102 班级额定人数:5][学号:1001 姓名:Jack 年龄:22 身高:180 班级编号:1 是否在读:true, 学号:1002 姓名:Rose 年龄:20 身高:165 班级编号:1 是否在读:true, 学号:1003 姓名:Sara 年龄:21 身高:163 班级编号:1 是否在读:true, 学号:1004 姓名:Tony 年龄:24 身高:178 班级编号:1 是否在读:true, null]
    结果没有按照身高来排列,请问如何修改
      

  2.   

    public static <T> void sort(T[] a,
                                Comparator<? super T> c)
      

  3.   

    如果是自然排序就不需要自己实现 直接sort本身就是按自然排序的
      

  4.   


     public int compareTo(Student s) {
            //return this.getHight() - s.getHight(); //这里改一下,如果不改,就跟默认排序一样
         return  s.getHight() - this.getHight();
        }
      

  5.   


    好像引用类型排序需要实现Comparable接口,
      

  6.   

        public int compareTo(Student s) {
            return this.getHight() - s.getHight();没问题呀~用自身减去传进来比较的,正数则this大于S
      

  7.   

    在群里问了一下朋友,这个问题搞定了,sort方法应该放在addStudent方法前面,这样就行了!
    不过还是谢谢楼上的几位朋友,呵呵!
      

  8.   


    Arrays.sort(stu);默认排序
    Arrays.sort(stu, Comparator<Student>() {
        public  int compare(Student o1, Student o2) {
            return o1.getHeight() - o2.getHeight();//根据排序规则调换减数被减数。
        }
    });
      

  9.   

    static void sort(Object[] a) 
              根据元素的自然顺序对指定对象数组按升序进行排序。 
    这是jdk1.6中文版的解释
    Arrays.sort(stu);
    System.out.println(Arrays.toString(classes[0].getStu()));
    改为
    List<Student> list=Arrays.asList(stu);
            Collections.sort(list);
            for(Student st: list){
             System.out.println(st);
            }
    输出了
      

  10.   


    就是这个原因,因为Arrays.sort对数组元素进行了排序,数组本身是按顺序排列了,但是add到list的元素没有任何影响,即list本身没有排序,所以,要么就像你说的sort方法放在addStudent之前,即排好序再保存到List,要么就是对List进行排序,即
    for(int i=0; i<stu.length; i++) {
        classes[0].addStudent(stu[i]);    
    }//Arrays.sort(stu);
    Collections.sort(classes[0]); //对List排序而不是对数组排序
      

  11.   


    嗯, 你这个办法也不错!
    昨天还有一个办法就是先存进去,然后再调用getStu方法拿出来再排序,不过这个方法有点多余重复了,呵呵