> 文档中心 > 案例:集合到文件(数据排序改进版)

案例:集合到文件(数据排序改进版)


案例:集合到文件(数据排序改进版)

  • 需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)。

  • 要求按照成绩总分从高到低写入文本文件

  • 格式:姓名,语文成绩,数学成绩,英语成绩
    举例:菜徐琨,60,40,50

  • 思路:

  1. 定义学生类
  2. 创建TreeSet集合
  3. 键盘录入学生数据
  4. 创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
  5. 把学生对象添加到TreeSet集合
  6. 创建字符缓冲流输出流
  7. 遍历学生,得到每一个学生对象
  8. 把学生对象的数据拼接成指定格式的字符串
  9. 调用字符缓冲输出流对象的方法写数据
  10. 释放资源

以图文和代码内容形式讲解

图文:
柏维怡我爱你
柏维怡我爱你
代码:

package Demo;import java.io.*;import java.util.Comparator;import java.util.Scanner;import java.util.TreeSet;public class Demo {    public static void main(String[] args) throws IOException { //建立TreeSet集合 TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {     @Override     public int compare(Student s1,Student s2) {  int num;  //如果语文成绩后者大于前者,则降序  num=s2.getYw()-s1.getYw();//s2-s1的话降序  //同类可推   数学的  int num2=num==0?s2.getSx()-s1.getSx():num;  //同类可推   英语的  int num3=num2==0?s2.getYy()-s1.getYy():num2;  return num3;     } }); //建立循环,总共执行5次 int i=1; while(i<=5){     Scanner sc = new Scanner(System.in);     System.out.println("请输入第"+i+"个人的姓名");     String name = sc.nextLine();     System.out.println("请输入语文成绩");     int yw = sc.nextInt();     System.out.println("请输入数学成绩");     int sx = sc.nextInt();     System.out.println("请输入英语成绩");     int yy = sc.nextInt();     //建立学生类     Student st = new Student(name,yw,sx,yy);     //添加到集合     ts.add(st);     i++; } //将集合的内容添加到文件中 BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\item\\Hellow\\javasss.txt")); //开始写文件 for (Student x:ts){     StringBuilder sb = new StringBuilder();     //将内容写入同一对象字符串地址中,可以防止浪费资源和效率低下问题     sb.append(x.getName()).append(",").append(x.getYw()).append(",").append(x.getSx()).append(",").append(x.getYy());     bw.write(sb.toString());     bw.newLine();     bw.flush(); } //释放资源 bw.close();    }}

输出的结果
柏维怡我爱你

组词