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

该博客展示了如何在Java中实现键盘录入5个学生的信息(姓名、语文、数学、英语成绩),然后利用TreeSet集合按照总分进行排序,并将排序后学生信息写入文本文件。通过定义学生类,创建TreeSet并自定义比较器,最后使用BufferedWriter写入文件。
摘要由CSDN通过智能技术生成

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

  • 需求:键盘录入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();
    }
}

输出的结果
柏维怡我爱你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发热的嘤嘤怪(2003计科胜胜同学)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值