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

需求:键盘录入五个学生信息(姓名,语文成绩,数学成绩,英语成绩)。要求按照成绩总分从高到低写入文本文件

格式:姓名,语文成绩,数学成绩,英语成绩

举例:塞拉斯,98,99,100

思路:

        定义学生类

        创建TreeSet集合,通过比较器排序进行排序

        键盘录入学生数据

        创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量

        把学生对象添加到TreeSet集合

        创建字符缓冲流对象

        遍历集合,得到每一个学生对象

        把学生对象的数据拼接成指定格式的字符串

        调用字符缓冲流输出对象的 方法写数据

        释放资源


定义学生类:

package com.aynu11;

//定义学生类
public class Student {
    //姓名
    private String name;
    private int chinese;
    private int math;
    private int english;

    public Student() {
    }

    public Student(String name, int chinese, int math, int english) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }

    public int geSum() {
        return this.chinese + this.math + this.english;

    }
}
package com.aynu11;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

//需求:键盘录入五个学生信息(姓名,语文成绩,数学成绩,英语成绩)。要求按照成绩总分从高到低写入文本文件
//
//        格式:姓名,语文成绩,数学成绩,英语成绩
//
//        举例:塞拉斯,98,99,100
//
//        思路:
//        定义学生类
//        创建TreeSet集合,通过比较器排序进行排序
//        键盘录入学生数据
//        创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
//        把学生对象添加到TreeSet集合
//        创建字符缓冲流对象
//        遍历集合,得到每一个学生对象
//        把学生对象的数据拼接成指定格式的字符串
//        调用字符缓冲流输出对象的 方法写数据
//        释放资源
public class TreeSetToFileDemo {
    public static void main(String[] args) throws IOException {
        //创建TreeSet集合,通过比较器排序进行排序
        TreeSet ts = new TreeSet(new Comparator() {
            @Override
            public int compare(Student s1, Student s2) {
                //成绩总分从高到低
                int num = s2.geSum() - s1.geSum();
                //次要条件
                //总分相同时
                int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;
                int num3 = num2 == 0 ? s1.getMath() - s2.getMath() : 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("请录入第"+(i+1)+"个学生信息:");
            System.out.println("姓名");
            String name=sc.nextLine();
            System.out.println("语文成绩");
            int chinese = sc.nextInt();
            System.out.println("数学成绩");
            int math = sc.nextInt();
            System.out.println("英语成绩");
            int english = sc.nextInt();

            //创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
            Student s=new Student();
            s.setName(name);
            s.setChinese(chinese);
            s.setMath(math);
            s.setEnglish(english);

            //把学生对象添加到TreeSet集合
            ts.add(s);

        }

        //创建字符缓冲流对象
        BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\idea1\\workplace\\myMap\\ts.txt"));

        //遍历集合,得到每一个学生对象
        for (Student s:ts){
            //把学生对象的数据拼接成指定格式打的字符串
            //格式:姓名,语文成绩,数学成绩,英语成绩
            StringBuilder sb=new StringBuilder();
            sb.append(s.getName()).append(",").append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish()).append(",").append(s.geSum());


            //调用字符缓冲流输出对象的 方法写数据
            bw.write(sb.toString());
            bw.newLine();
            bw.flush();
        }

        //释放资源
        bw.close();
    }

}

 集合到文件(数据排序改进版)_第1张图片

 

 

你可能感兴趣的:(java)