> 文章列表 > 集合到文件(数据排序改进版)

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

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

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

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

举例:塞拉斯,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<Student> ts = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic 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();}}