一道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;
    }
}

一道Java编程题,拜托了各位大神
1.定义一个Student类,包括学号,姓名,成绩三个字段,生成get,set和toString方法,实现Comparable接口,重写toCompare方法,方法里就是本题的逻辑,先按成绩比较,再按学好比较,使用TreeSet不实现这个接口会报错。package Collection;public class Student implements Comparable<Student> {private long sno;priv...

关于JAVA编程的问题;100以内能被3和7整除的数,两个结果为什么不同呢...
一: public class Test{ public static void main(String[] args){ int i=100; System.out.println("100以内能被3和7整除的数有"); while(i>0){ if(i%7==0){ if(i%3==0) System.out.print(i+" "); i--;} else i--; } } } 二: public class Test{ public static ...

1%2=0,还是1%2=1?(java中)拜托各位大神
1%2等于0。下面进行 在Java编程语言中,"%"符号是取模运算符,用于计算两个数相除后的余数。当使用整数进行运算时,"a % b"表示的是a除以b的余数。在这个情况下,"1%2"表示的是数字1除以数字2的余数。由于任何整数除以2的余数都是整数本身或者为整数减一,所以在这个特定的例子中,当计算结果为...

用java写出 随机功能:1-32之中随机产生6个数,这6个数不能有重复的...
public class NumberDemo{public static void main(String []args) {int[] num=new int[6];int[] vis=new int[33];\/\/vis[0]---vis[32]\/\/ vis[i]:0 1 vis[5]=0表示5之前没有出现过 vis[5]=1表示5之前出现过int cnt = 0, tmp;while(cnt < 6) {tmp = (int)(Math.random(...

JAVA-拜托高手帮帮忙.
import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;\/ 首先说明:女生和男生一样有潜力。我们班的一个女生特别勤奋,所以编程水平比我高很多...

如图,写出两个Java程序的运行结果,拜托了
第一个程序:public class Test { static int x = 5; public static void methodA() { x = x + 5; System.out.println("x in methodA() = " + x); } public static void main(String[] args) { int x = 5; methodA(); System.out.println("x in...

求解JAVA题
第一题里的各个域打出来是指域名吗?第二题是:public static String leftStr(String source, int maxByteLen) { int byteLen = 0; \/\/ 记录字节数 StringBuffer sb = new StringBuffer(); \/\/ 返回的字符串 \/\/ 循环给定的字符串source for (int i = 0; i < source.length(); i++) {...

JAVA编程有关吸血鬼数字【高分高分】请写出步骤,谢谢啦,急需明天就用拜...
应该符合你的要求吧 public class A { private int count = 9; \/\/一个因子 同时也是计数器 public static void main(String[] args){ A a = new A(); a.calcu(); } \/\/是用递归进行计算 只要10~99之间的因子计算 public void calcu(){ if(count > 99) return; else count++...

JAVA编程!!急急急!!!再插三根鸡毛!!!·
试试这个程序.大概思路是这样的.细节可能有错.我还没运行过.自己改一下吧 import java.util.*;public class lin { public static void main(String[] args){ Scanner in=new Scanner(System.in);System.out.print("input the year:");int n=in.nextInt();int[] factor=new int[100];int[...

java算法问题 排列组合 给定一组字符串,产生所有可能的集合
这是我写的一个取组合的方法:package Combination.c3;import java.util.ArrayList;import java.util.List;public class Combinations { \/ 设有n个元素,组合数量有2的n次方种。对 0 到 2的n次方-1 中的每个数,考察其二进制位形式,位数为1代表相应元素加入 到组合,0则不加入该元素至组合。取...

相似回答