黑马程序员技术交流社区

标题: 一个集合和流的综合练习 [打印本页]

作者: xiaoqiang01    时间: 2015-7-12 01:50
标题: 一个集合和流的综合练习
  1. /**
  2. 需求:
  3. 有五个学生,每个学生有3门课的成绩,
  4. 从键盘输入以上数据(包括姓名,三门课成绩)
  5. 输入的格式:如:zhangsan,70,80,90计算出总成绩,
  6. 并把学生的信息和计算出的总成绩高低顺序存放在stud.txt文件中
  7. */
  8. /*
  9. 思路:
  10. 1.编写学生类,包含姓名和三门课成绩,总成绩
  11. 2.创建流,源设备是键盘,目的是硬盘内stud.txt,纯文本,需要缓冲区
  12. 3.按键盘录入数据建立学生对象学生对象,并将学生对象录入集合
  13. 4.编写比较器,按总成绩排序,并让集合实现比较器排序
  14. 5.输出流输出
  15. */
  16. import java.io.*;
  17. import java.util.*;
  18. class Student
  19. {
  20.         private String name;
  21.         private int[] sc;
  22.         private int sum = 0;
  23.         //构造方法直接计算总成绩
  24.         Student(String name,int[] sc)
  25.         {
  26.                 this.name = name;
  27.                 this.sc = sc;
  28.                 for(int i:sc)
  29.                         sum += i;
  30.         }
  31.         //返回三门成绩的字符串
  32.         public String getSc()
  33.         {
  34.                 StringBuilder str = new StringBuilder();
  35.                 for(int i:sc)
  36.                         str.append(i+",");
  37.                 //去除末尾逗号
  38.                 str.substring(0,str.length()-2);
  39.                 return str.toString();
  40.         }
  41.         //返回姓名
  42.         public String getName()
  43.         {
  44.                 return name;
  45.         }
  46.         //返回总成绩
  47.         public int getSum()
  48.         {
  49.                 return sum;
  50.         }
  51. }
  52. //实现比较器,通过成绩排序
  53. class Sum implements Comparator<Student>
  54. {
  55.         public int compare(Student stu1,Student stu2)
  56.         {
  57.                 int i;
  58.                 i = (stu1.getSum()+"").compareTo(stu2.getSum()+"");
  59.                 //成绩相同比较名字
  60.                 if(i == 0)
  61.                         return stu1.getName().compareTo(stu2.getName());
  62.                 return i;
  63.         }
  64. }
  65. class  StudentDemo
  66. {
  67.         public static void main(String[] args) throws IOException
  68.         {
  69.                 System.out.println("请按\"姓名,分数1,分数2,分数3\"的格式输入学生成绩:");
  70.                 outIO(inIO());
  71.                 System.out.println("成绩已录入");
  72.         }
  73.         //根据键盘录入创建学生对象
  74.         public static TreeSet<Student> inIO()throws IOException
  75.         {
  76.                 TreeSet<Student> st = new TreeSet<Student>(new Sum());
  77.                 BufferedReader br =
  78.                         new BufferedReader(new InputStreamReader(System.in));
  79.                 //输入五次
  80.                 for (int x=0;x<5 ;x++ )
  81.                 {
  82.                         String stu = br.readLine();
  83.                         //分割录入字符串
  84.                         String[] stuarr = stu.split(",");
  85.                         //将成绩部分转化为int数组
  86.                         int[] sc = new int[3];
  87.                         for (int i = 0;i<3 ;i++ )
  88.                         {
  89.                                 sc[i] = Integer.parseInt(stuarr[i+1]);
  90.                         }
  91.                         st.add(new Student(stuarr[0],sc));
  92.                 }
  93.                 br.close();
  94.                 return st;
  95.         }
  96.         public static void outIO(Set<Student> st) throws IOException
  97.         {
  98.                 //打印流,参数true表示每次运行打印命令自动刷新
  99.                 PrintWriter pw = new PrintWriter(new FileOutputStream("stud.txt"),true);
  100.                 //迭代学生,打印成绩
  101.                 Iterator<Student> it = st.iterator();
  102.                 while (it.hasNext())
  103.                 {
  104.                         Student stu = it.next();
  105.                         pw.println(stu.getName()+"  单科成绩:"+stu.getSc()+"  总分:"+stu.getSum());
  106.                 }
  107.                 pw.close();
  108.         }

  109. }
复制代码





作者: 洋葱头头    时间: 2015-7-12 09:35
不错嘿:lol
作者: 禾叶青青    时间: 2015-7-12 09:38
学习了,感谢楼主




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2