308 集合到文件数据排序改进版

41 篇文章 0 订阅
该代码示例演示了如何使用Java编程实现键盘录入5个学生的信息,包括姓名、语文、数学和英语分数,然后利用TreeSet集合和自定义比较器对学生数据进行排序,最后将排序后的学生信息以指定格式写入文件。程序实现了按总分从高到低的排序,并在总分相同的情况下,进一步比较语文、数学分数和姓名来确保排序的准确性。
摘要由CSDN通过智能技术生成

308 集合到文件数据排序改进版

【需求】

键盘录入5个学生的信息,

每个学生。包括姓名、语文分数、数学分数、英语分数。

顺序。按总分从高到低 顺序写入文件

格式。姓名:语文分数,数学分数,英语分数,例如MOLE:80,70,71

【思路】

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

--------------------------------------------------------------

package e308;

public class Student308 {

    private String name;

    private int chiScore;

    private int matScore;

    private int engScore;

    …

    public int getSum() {

        return this.chiScore + this.matScore + this.engScore;

    }

}

--------------------------------------------------------------

package e308;

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Comparator;

import java.util.Scanner;

import java.util.TreeSet;

public class OriginalEdition {

    public static void main(String[] args) throws IOException {

        TreeSet<Student308> ts = new TreeSet<>(new Comparator<Student308>() {

            @Override

            public int compare(Student308 s1, Student308 s2) {

                int num = s2.getSum() - s1.getSum();

//细化比较各科分数

                int num2 = num == 0 ? s1.getChiScore() - s2.getChiScore() : num;

                int num3 = num2 == 0 ? s1.getMatScore() - s2.getMatScore() : num2;

                int num4 = num3 == 0 ? s1.getName().compareTo(s2.getName()) : num3;

                return num4;

            }

        });

        for (int i = 0; i < 5; i++) {

            Scanner sc = new Scanner(System.in);

            System.out.println("the score of NO." + (i + 1) + " student");

            System.out.println("name:");

            String name = sc.nextLine();

            System.out.println("Chinese:");

            int chiScore = sc.nextInt();

            System.out.println("Math:");

            int matScore = sc.nextInt();

            System.out.println("English:");

            Student308 s = new Student308();

            s.setName(name);

            s.setChiScore(chiScore);

            s.setMatScore(matScore);

            s.setEngScore(sc.nextInt());

            ts.add(s);

        }

        BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\src\\e308\\StudentFile.txt"));

        for (Student308 s : ts) {

            StringBuilder sb = new StringBuilder();

            sb.append(s.getChiScore()).append(",").append(s.getMatScore()).append(",").append(s.getEngScore()).append("_").append(s.getName()).append("_").append(s.getSum());

            bw.write(sb.toString());

            bw.newLine();

            bw.flush();

        }

    }

}

--------------------------------------------------------------

(StudentFile.txt)

9,9,9_BADGER_27

8,8,8_RAT_24

7,7,7_MOLE_21

6,6,6_OTTER_18

5,5,5_TOAD_15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值