练习:存储学生信息
2015-10-13 19:21
411 查看
package exercise; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.Collections; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; //学生类,实现Comparable接口,能够比较 class Student implements Comparable<Student> { private String name; private int ma, cn, en; private int sum; Student(String name, int ma, int cn, int en) { this.name = name; this.ma = ma; this.cn = cn; this.en = en; sum = ma + cn + en; } public String getName() { return name; } public int getSum() { return sum; } public int hashCode() { return name.hashCode() + sum * 78; } public boolean equals(Object obj) { if (!(obj instanceof Student)) throw new ClassCastException("类型不匹配"); Student s = (Student) obj; return this.name.equals(s.name) && this.sum == s.sum; } //覆盖compareTo方法 @Override public int compareTo(Student s) { int num = new Integer(this.sum).compareTo(new Integer(s.sum)); if (num == 0) return this.name.compareTo(s.name); return num; } public String toString() { return "student[" + name + ", " + ma + ", " + cn + ", " + en + "]"; } } //工具类 class StudentInfoTool { public static Set<Student> getStudents() throws IOException { return getStudents(null); } //Comparator比较器 public static Set<Student> getStudents(Comparator<Student> cmp) throws IOException { BufferedReader bufr = new BufferedReader(new InputStreamReader( System.in)); String line = null; Set<Student> stus = null; if (cmp == null) { stus = new TreeSet<Student>(); } else { stus = new TreeSet<Student>(cmp); } while ((line = bufr.readLine()) != null) { if ("over".equals(line)) break; String[] info = line.split(","); Student stu = new Student(info[0], Integer.parseInt(info[1]), Integer.parseInt(info[2]), Integer.parseInt(info[3])); stus.add(stu); } bufr.close(); return stus; } //写入文件方法 public static void write2File(Set<Student> stus) throws IOException { BufferedWriter bufw = new BufferedWriter(new FileWriter("stuinfo.txt")); for (Student stu : stus) { bufw.write(stu.toString() + "\t"); bufw.write(stu.getSum() + ""); bufw.newLine(); bufw.flush(); } bufw.close(); } } public class StudentInfoTest { public static void main(String[] args) throws IOException { // 按照成绩递增 Set<Student> stus1 = StudentInfoTool.getStudents(); // 按照成绩递减 Comparator<Student> cmp = Collections.reverseOrder(); Set<Student> stus2 = StudentInfoTool.getStudents(cmp); StudentInfoTool.write2File(stus2); } }
相关文章推荐
- 一道题理解Java父子类初始化顺序什么是CopyOnWrite容器
- 大龄屌丝自学笔记--Java零基础到菜鸟--034
- vijosP1289 老板娘的促销方案
- 第四次作业--目标软件:必应词典
- Objective-c开发中混合使用ARC
- 第7周-反向显示一个数
- 解析Python中while true的使用
- poj Balanced Lineup (线段树区间最值+优化)
- web技术概论第一周作业
- 前端工程师必备的PS技能——切图篇(笔记)
- 杭电acm--1037
- 借贷宝“自我绑架”:传销式推广只能“烧钱”玩下去?
- ios短信和电话--参考
- Reachability网络判断
- 【停课集训10.13】【#3 training】
- js中的引用赋值
- BZOJ 1093: [ZJOI2007]最大半连通子图( tarjan + dp )
- 高效JQuery编码
- 条件变量的细节问题
- linux内核网络参数somaxconn