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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
/*
* 需求:输入5位学生的年龄和3门成绩 进行从高到低排序并将内容保留到本地文本文件中
* PS:学生类在此省略
* */
public class StudentTest {
        public static void main(String[] args) throws IOException {
                /**
                 * 第一步:定义一个用来存储学生对象的TreeMap容器 并使用匿名内部接口实现comparator
                 *
                 * */
               
                TreeSet<Student>tm=new TreeSet<Student>(new Comparator<Student>() {
                        public int compare(Student s1, Student s2) {
                                int sum=s2.getSum()-s1.getSum();
                                int chinese=(sum==0)?s2.getChinese()-s1.getChinese():sum;
                                int math=(chinese==0)?s2.getMath()-s1.getMath():chinese;
                                int name=(math==0)?s2.getName().compareTo(s1.getName()):math;
                                return name;
                        }
                });
               
                /**
                 * 第二步:循环录入5名学生的姓名和成绩
                 *
                 * */
               
                for(int i=0;i<5;i++){
                        Scanner in=new Scanner(System.in);
                        System.out.println("请输入第"+(i+1)+"学生名字");
                        String name=in.nextLine();
                        System.out.println("请输入语文成绩:");
                        int chinese=in.nextInt();
                        System.out.println("请输入数学成绩:");
                        int math=in.nextInt();
                        System.out.println("请输入英文成绩:");
                        int english=in.nextInt();
                       
                        Student s=new Student(name,chinese,math,english);//设置每位学生的名字和成绩 本人比较懒 这里直接使用构造方法赋值(一般使用set设置属性)
                        tm.add(s);//然后添加到集合中
                }
                /**
                 * 第三步:创建字符缓冲区对象 将集合对象写出到本地文本中
                 * */
               
                BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\StudentDate.txt"));
                for(Student i:tm){
                        bw.write(i.toString());
                        bw.newLine();
                        bw.flush();
                       
                }
                bw.close();
        }

}

2 个回复

正序浏览
你那个比较器写的真高级
回复 使用道具 举报
风华正茂 来自手机 中级黑马 2015-8-23 12:25:59
沙发
谢谢楼主分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马