一道Java编程题,拜托了各位大神
1702班10个学生的学号为170201~170210,全部学习了Java程序设计课程,请编写程序将本班各位同学的成绩按照从高到低排序打印输出,如果成绩一样,那么按学号小...
1702班10个学生的学号为170201~170210,全部学习了Java程序设计课程,请编写程序将本班各位同学的成绩按照从高到低排序打印输出,如果成绩一样,那么按学号小的靠前排列。(要求:用集合来实现,打印的信息包括学号,姓名和成绩)(提示Comparable接口与Treeset集合)
展开
2个回答
展开全部
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);
}
}
}
最后贴一个运行结果
展开全部
实现如下:
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询