308 集合到文件数据排序改进版
【需求】
键盘录入5个学生的信息,
每个学生。包括姓名、语文分数、数学分数、英语分数。
顺序。按总分从高到低 顺序写入文件
格式。姓名:语文分数,数学分数,英语分数,例如MOLE:80,70,71
【思路】
- 定义学生类
- 创建 TreeSet集合,用 比较器排序 实现排序【】
- 键盘录入 学生数据
- 创建 学生对象,把 学生数据 赋值给 学生对象成员变量
- 添加 学生对象 到TreeSet集合
- 创建 字符缓冲输出流对象
- 遍历集合,得到每个学生对象
- 拼接 学生对象的数据 为 指定格式的字符串
- 用 输入流的方法 写数据
- 释放资源
--------------------------------------------------------------
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