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

一、需求

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(FileNotFoundException e) {

              e.printStackTrace();

         }catch(IOException e) {

              e.printStackTrace();

         }finally{

              if(null != br){

                   try {

                       br.close();

                   }catch(IOException e) {

                       e.printStackTrace();

                   }

              }

         }

         return students;

        

     }

}

b)        Student.java

//实体类

public classStudent {

     private int id;

     private String name;

     private int age;

     private int score;

     public int getId() {

         return id;

     }

     public void setId(int id) {

         this.id = id;

     }

     public String getName() {

         return name;

     }

     public void setName(String name) {

         this.name = name;

     }

     public int getAge() {

         return age;

     }

     public void setAge(int age) {

         this.age = age;

     }

     public int getScore() {

         return score;

     }

     public void setScore(int score) {

         this.score = score;

     }

}

c)        StudentComparator.java

1import java.util.Comparator;

 

public classStudentComparator implements Comparator<Student> {

 

     @Override

     public int compare(Student s1, Student s2) {

         return s2.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(Student s : 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(Student s : 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

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值