A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lxsaks 中级黑马   /  2014-12-26 13:33  /  1161 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天在做黑马程序员入学的基础测试题,创建一个Student类,有name ,age,score三个属性。创建5个student 对象,装入TreeSet中,要根据score排序。纠结

10 个回复

正序浏览
有两种方式:对象本身的自然排序,或者实现容器的可比较性(comparator)
回复 使用道具 举报
  1. public class StudentDemo {
  2.         public static void main(String[] args) throws IOException {
  3.                 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {

  4.                         public int compare(Student s1, Student s2) {
  5.                                 int num = s2.getSum() - s1.getSum();
  6.                                 int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;
  7.                                 int num3 = num2 == 0 ? s1.getEnglish() - s2.getEnglish() : num2;
  8.                                 int num4 = num3 == 0 ? s1.getMath() - s2.getMath() : num3;
  9.                                 int num5 = num4 == 0 ? s1.getName().compareTo(s2.getName())
  10.                                                 : num4;
  11.                                 return num5;

  12.                         }
  13.                 });
  14.                 for (int x = 1; x <= 5; x++) {
  15.                         Scanner sc = new Scanner(System.in);
  16.                         System.out.println("请输入第" + x + "个的学习信息");
  17.                         System.out.println("姓名:");
  18.                         String name = sc.nextLine();
  19.                         System.out.println("语文成绩:");
  20.                         int chinese = sc.nextInt();
  21.                         System.out.println("数学成绩:");
  22.                         int math = sc.nextInt();
  23.                         System.out.println("英语成绩:");
  24.                         int english = sc.nextInt();

  25.                         Student s = new Student();
  26.                         s.setName(name);
  27.                         s.setChinese(chinese);
  28.                         s.setEnglish(english);
  29.                         s.setMath(math);
  30.                         ts.add(s);
  31.                 }
  32.                 BufferedWriter bw = new BufferedWriter(new FileWriter("Student.txt"));
  33.                 bw.write("学生信息如下:");
  34.                 bw.newLine();
  35.                 bw.flush();
  36.                 bw.write("姓名:语文成绩,英语成绩,数学成绩");
  37.                 bw.newLine();
  38.                 for (Student s : ts) {
  39.                         StringBuilder sb = new StringBuilder();
  40.                         sb.append(s.getName()).append(":").append(s.getChinese())
  41.                                         .append(",").append(s.getEnglish()).append(",")
  42.                                         .append(s.getMath());
  43.                         bw.write(sb.toString());
  44.                         bw.newLine();
  45.                         bw.flush();
  46.                 }
  47.                 bw.close();
  48.                 System.out.println("学生信息录取完毕");
  49.         }
  50. }
复制代码
回复 使用道具 举报
xiao飞 中级黑马 2014-12-31 13:15:15
9#
用Student类实现,Compnable 方法,复写里面的compTo方法就行,可以自己定义用什么样的方式排序
回复 使用道具 举报
等我下午学了就教教你:lol
回复 使用道具 举报
子集可以再Student类中实现Comprabale,重写Compare方法
回复 使用道具 举报
其实很多看完视频也不懂,那就多做题吧,做多了自己就懂了,我是这么认为的。
回复 使用道具 举报
视频里面有,这个我刚看过
回复 使用道具 举报
我怎么不能发表提问??
回复 使用道具 举报
这个不难,看视频了就会
回复 使用道具 举报
看视频吧,视频有讲的。
compareTo 和Comparator
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马