A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

  1. package com.kxg_2;

  2. import java.io.BufferedWriter;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.Comparator;
  6. import java.util.Scanner;
  7. import java.util.TreeSet;

  8. /*
  9. * 需求:键盘录入5个学生信息(姓名,语数英成绩),按照总分从高到底存入文本文件
  10. *
  11. * 分析:
  12. *                 A:创建学生类
  13. *                 B:创建集合对象
  14. *                                 TreeSet<Student>
  15. *                 C:键盘录入学生信息存储到集合
  16. *                 D:遍历集合,把数据写到文本文件
  17. */
  18. public class StudentDemo {
  19.         public static void main(String[] args) throws IOException {
  20.                 // 创建集合,并用比较器排序
  21.                 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
  22.                         @Override
  23.                         public int compare(Student s1, Student s2) {
  24.                                 int num = s1.getSum() - s2.getSum();
  25.                                 int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;
  26.                                 int num3 = num2 == 0 ? s1.getMath() - s2.getMath() : num2;
  27.                                 int num4 = num3 == 0 ? s1.getEnglish() - s2.getEnglish() : num3;
  28.                                 int num5 = num4 == 0 ? s1.getName().compareTo(s2.getName())
  29.                                                 : num4;
  30.                                 return num5;
  31.                         }
  32.                 });

  33.                 // 定义五次循环,循环一次录入一个对象
  34.                 for (int i = 1; i <= 5; i++) {

  35.                         // 录入学生姓名,语数英成绩
  36.                         Scanner sc = new Scanner(System.in);
  37.                         System.out.println("请录入第" + i + "位学生");
  38.                         System.out.println("姓名:");
  39.                         String name = sc.nextLine();
  40.                         System.out.println("语文成绩:");
  41.                         int chinese = sc.nextInt();
  42.                         System.out.println("数学成绩:");
  43.                         int math = sc.nextInt();
  44.                         System.out.println("英语成绩:");
  45.                         int english = sc.nextInt();

  46.                         // 创建学生对象,添加学生信息
  47.                         Student s = new Student();
  48.                         s.setName(name);
  49.                         s.setChinese(chinese);
  50.                         s.setMath(math);
  51.                         s.setEnglish(english);

  52.                         // 把学生对象添加到集合中去
  53.                         ts.add(s);
  54.                 }

  55.                 // 封装需要写入的文件
  56.                 BufferedWriter bw = new BufferedWriter(new FileWriter("student.txt"));
  57.                 bw.write("学生信息如下:");
  58.                 bw.newLine();
  59.                 bw.flush();
  60.                 bw.write("学生姓名,语文成绩,数学成绩, 英语成绩");
  61.                 bw.newLine();
  62.                 bw.flush();

  63.                 // 遍历得到每个学生对象
  64.                 for (Student s : ts) {
  65.                         // 定义字符串缓冲区
  66.                         StringBuilder sb = new StringBuilder();
  67.                         // 添加学生信息添加到字符串缓冲区中
  68.                         sb.append(s.getName()).append(",").append(s.getChinese())
  69.                                         .append(",").append(s.getMath()).append(",")
  70.                                         .append(s.getEnglish());

  71.                         // 把字符串缓冲区转成字符串类型写入到文件中去
  72.                         bw.write(sb.toString());
  73.                         bw.newLine();
  74.                         bw.flush();
  75.                 }
  76.                 // 切记:释放资源,不然数据写不进去
  77.                 bw.close();
  78.         }
  79. }
复制代码


1 个回复

倒序浏览
受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马