【Java】文件中学生成绩排序

来源:互联网 发布:java招聘广州 编辑:程序博客网 时间:2024/04/24 02:59

一、需求

a)        文件students.txt中包含学号、姓名、年龄和成绩

b)        读取students文件,并按照成绩降序排序

c)        若成绩相同,按年龄升序排序

二、代码

a)        FileParser.java

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

 

public classFileParser {

     public List<Student>parse(){

         //读文件

         //将文件的每一条数据转换成学生对象

         List<Student>students =newArrayList<Student>();

         BufferedReaderbr = null;

         try {

              br = new BufferedReader(new FileReader("d:/students.txt"));

              String line;

              while(null != (line =br.readLine())){

                   String[]infos =line.split(",");//1,zhangsanfeng,23,78

                   //将该学习信息封装成一个学生对象

                   Students = new Student();

                   s.setId(Integer.parseInt(infos[0]));

                   s.setName(infos[1]);

                   s.setAge(Integer.parseInt(infos[2]));

                   s.setScore(Integer.parseInt(infos[3]));

                   //将学生对象存放到集合中

                   students.add(s);

              }

         }catch(FileNotFoundExceptione) {

              e.printStackTrace();

         }catch(IOExceptione) {

              e.printStackTrace();

         }finally{

              if(null !=br){

                   try {

                       br.close();

                   }catch(IOExceptione) {

                       e.printStackTrace();

                   }

              }

         }

         returnstudents;

        

     }

}

b)        Student.java

//实体类

public classStudent {

     private int id;

     private Stringname;

     private int age;

     private int score;

     public int getId() {

         returnid;

     }

     public void setId(intid) {

         this.id =id;

     }

     public String getName() {

         returnname;

     }

     public void setName(String name) {

         this.name =name;

     }

     public int getAge() {

         returnage;

     }

     public void setAge(intage) {

         this.age =age;

     }

     public int getScore() {

         returnscore;

     }

     public void setScore(intscore) {

         this.score =score;

     }

}

c)        StudentComparator.java

1import java.util.Comparator;

 

public classStudentComparator implements Comparator<Student> {

 

     @Override

     public int compare(Student s1, Students2) {

         returns2.getScore() - s1.getScore() == 0

                                 ?s1.getAge() -s2.getAge()

                                 :s2.getScore() -s1.getScore();

     }

}

d)        Test.java

import java.util.Collections;

import java.util.List;

 

public classTest {

     public static void main(String[] args) {

         FileParserfp = new FileParser();

         List<Student>students =fp.parse();

         if(null !=students && !students.isEmpty()){

              for(Students : students){

                   System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getScore());

              }

         }

         //对集合中所有的学生按照考试分数进行降序排序 并输出   

         Collections.sort(students,new StudentComparator());

         System.out.println("==========排序后================");

         if(null !=students && !students.isEmpty()){

              for(Students : students){

                   System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getScore());

              }

         }

        

     }

}

三、执行结果

1        liming        22       77

2        liqian        23       80

3        yanyan        22       70

4        chenxia       21       90

5        tanwei        22       80

==========排序后================

4        chenxia       21       90

5        tanwei        22       80

2        liqian        23       80

1        liming        22       77

3        yanyan        22       70

原创粉丝点击