黑马程序员技术交流社区

标题: 通过IO和集合将5名学生的姓名和3门成绩进行排序并保存到本地 [打印本页]

作者: 晨曦遇晓    时间: 2015-8-23 09:15
标题: 通过IO和集合将5名学生的姓名和3门成绩进行排序并保存到本地
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();
        }

}
作者: 风华正茂    时间: 2015-8-23 12:25
谢谢楼主分享
作者: sven556677    时间: 2015-8-23 19:43
你那个比较器写的真高级




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2