一道Java编程题,拜托了各位大神

1702班10个学生的学号为170201~170210,全部学习了Java程序设计课程,请编写程序将本班各位同学的成绩按照从高到低排序打印输出,如果成绩一样,那么按学号小的靠前排列。(要求:用集合来实现,打印的信息包括学号,姓名和成绩)(提示Comparable接口与Treeset集合)

1.定义一个Student类,包括学号,姓名,成绩三个字段,生成get,set和toString方法,实现Comparable接口,重写toCompare方法,方法里就是本题的逻辑,先按成绩比较,再按学好比较,使用TreeSet不实现这个接口会报错。

package Collection;

public class Student implements Comparable<Student> {
private long sno;
private String name;
private int score;

public long getSno() {
return sno;
}

public void setSno(long sno) {
this.sno = sno;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
if (this.score < o.score) {
return 1;
} else if (this.score > o.score) {
return -1;
} else {
if(this.sno<o.sno) {
return 1;
}else {
return -1;
}

}
}
@Override
public String toString() {
return "Student [sno=" + sno + ", name=" + name + ", score=" + score + "]";
}
}

2.然后写测试类,生成十个学生,然后插入treeset,直接遍历输出就是排序好的结果。

package Collection;

import java.util.Random;
import java.util.TreeSet;

public class TreeSetTest {
public static void main(String[] args) {
TreeSet<Student> ts=new TreeSet<Student>();
for(int i=0;i<10;i++) {
Student stu=new Student();
stu.setName("student"+i);
stu.setSno(170201+i);
stu.setScore(90+new Random().nextInt(10));
ts.add(stu);
}

for(Student stu:ts) {
System.out.println(stu);
}
}
}

最后贴一个运行结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-04

实现如下:

public static void main(String[] args) {
    //使用TreeSet集合自带排序,排序规则由Comparator中的compare方法确定
    TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
        @Override
        public int compare(Student o1, Student o2) {
            if (o1.getScore() == o2.getScore()){
                //分数一样,学号小的在前
                return o1.getStudentNo() - o2.getStudentNo();
            }
            //分数不一样,分数大的在前
            return o2.getScore() - o1.getScore();
        }
    });
    Student s1 = new Student(170201, "s1", 78);
    Student s2 = new Student(170203, "s1", 58);
    Student s3 = new Student(170202, "s1", 78);
     set.add(s1);
     set.add(s2);
     set.add(s3);
     System.out.println(set);
}

//学生类
class Student{
    private int studentNo;
    private String name;
    private int score;

    public Student(int studentNo, String name, int score) {
        this.studentNo = studentNo;
        this.name = name;
        this.score = score;
    }

    public int getScore(){
        return score;
    }

    public int getStudentNo() {
        return studentNo;
    }

    @Override
    public String toString() {
        return "姓名:" + name + ",学号:" + studentNo + ",分数:" + score;
    }
}