需求是这样的 我现在在键盘上输入学生的名字 数学 语文 和英语 成绩 用逗号隔开over录入结束
然后要求录入的数据 存入到一个文本文件中
下面是我写的代码
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.Set;
- import java.util.TreeSet;
- public class StuDemo {
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- Comparable<Student> com = Collections.reverseOrder();
-
- Set<Student> s =StudentTool.getStu(com);//获取学生
- StudentTool.writeToFile(s);//写入学生
- }
- }
- //写学生对象
- 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 this.name;
-
- }
- public int getSum(){
-
- return sum;
- }
- //这里还可以复写一个哈希code方法
- public int hashCode(){
-
- return name.hashCode()+sum*68;
-
- }
- @Override
-
-
- //写一个方法开先匹不匹配
- public boolean equals(Object o){
-
- if(!(o instanceof Student))
- throw new RuntimeException("类型不匹配");
- Student s = (Student)o;//强转为学生
-
- return this.name.equals(s.name)&& this.sum==s.sum;//即为同一个人
-
- }
-
- public String toString(){
-
- ;
- return "学生["+name+","+ma+","+cn+","+en+"]";
- }
- @Override
- public int compareTo(Student s) {
- // TODO Auto-generated method stub
- int ii=new Integer(s.sum).compareTo(this.sum);
- if(ii==0)
- return s.name.compareToIgnoreCase(this.name);
- return ii;
-
- }
-
- }
- //将学生的信息存入到文件中
- class StudentTool{
- //定义一个静态方法用于将学生存入到集合中去
- public static Set<Student> getStu()throws IOException{
-
- return getStu(null);
- }//默认排序
- public static Set<Student> getStu(Comparator<Student> cmp)throws IOException{
-
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//记录下键盘
- Set<Student> set = null;
- if(cmp==null)
- set =new TreeSet<Student>();//如果是空则默认
- else
- set = new TreeSet<Student>(cmp);//否则比较器
- //开始读
- String line =null;
- while((line=br.readLine())!=null){
- if("over".equals(line))
- break;//如果输入了over 就停止程序
- String[] ss =line.split(",");//这个地方用逗号切一下
- Student s =new Student(ss[0],Integer.parseInt(ss[1]),Integer.parseInt(ss[2]),Integer.parseInt(ss[3]));
- set.add(s);
- }
- br.close();
- return set;
- }
-
- public static void writeToFile(Set<Student> se) throws IOException{
- BufferedWriter bw = new BufferedWriter(new FileWriter("stu.txt"));
- for(Student s:se){
-
- bw.write(s.toString()+"/t");//写学生
- bw.write(s.getSum());//写 总分
- bw.newLine();
- bw.flush();
-
- }
- bw.close();
-
- }
- }
复制代码 关键就是在主方法中 我现在已经强行逆转了比较器 如果我传入我自己的比较器的话为什么会报错
我的getStu明明有一个传参Comparator的方法 我该怎么修改{:soso_e136:}
|