本帖最后由 ぺsimon☆ 于 2013-5-2 23:34 编辑
- <div class="blockcode"><blockquote>/*
- 有个5个学生,每个学生有3门课的成绩
- 从键盘输入以上数据,包括姓名和三门课成绩
- 输入格式:zhangsan,20,40,60
- 并把学生的信息和计算出的总分数高低顺序存放在磁盘文件
- */
- import java.io.*;
- import java.util.*;
- //定义一个学生类
- class Student implements Comparable<Student>
- {
- private String name; //姓名
- private double ma,cn,en; //三门课程的分数
- private double sum; //总分
- Student(String name,double ma,double cn,double en) //构造函数初始化
- {
- this.name=name;
- this.ma=ma;
- this.en=en;
- this.cn=cn;
- sum=ma+cn+en; //总分
- }
- public void setName(String s) //函数修改学生姓名
- {
- this.name=name;
- }
- public String getName() //获取学生姓名
- {
- return this.name=name;
- }
- public double getSum() //获取总分
- {
- return this.sum=sum;
- }
- public int compareTo(Student s) //覆盖compareTo()方法
- {
- int num=new Double(this.sum).compareTo(new Double(s.sum));
- if(num==0)
- return this.name.compareTo(s.name);
- return num;
- }
- public int hashCode() //覆盖hashCode()方法
- {
- return this.name.hashCode()+(int)sum*31;
- }
- public boolean equals(Object obj)//覆盖equals方法
- {
- if(!(obj instanceof Student))
- throw new ClassCastException("类型不匹配");
-
- Student stu=(Student)obj;
- return this.name.equals(stu.name)&&this.sum==stu.sum;
- }
- public String toString()//覆盖toString方法
- {
- return "Student["+name+", "+ma+", "+cn+", "+en+"]";
- }
- }
- class StudentTool
- {
- public static Set<Student> getStudents()//这个得到的是自然排序的集合
- {
- return getStudents(null);
- }
- //这个是有比较器的集合
- public static Set<Student> getStudents(Comparable<Student> cmp)
- {
- Set<Student> stus=null;
- if(cmp==null)
- stus=new TreeSet<Student>(); //定义一个自然排序的treeSet集合
- else
- stus=new TreeSet<Student>(cmp);//定义一个自定义排序的集合
- //创建一个字符流,以便键盘录入
- BufferedReader bufr=null;
- try
- {
- bufr=new BufferedReader(new InputStreamReader(System.in));
- String line=null;
- while((line=bufr.readLine())!=null)
- {
- if(line.equals("over"))//键盘录入的退出条件
- break;
- String[] str=line.split(","); //用","切割从键盘读取到的字符串
- //创建学生对象
- Student stu=new Student(str[0],new Double(str[1]),new Double(str[2]));
- stus.add(stu);//把学生对象添加到集合
-
- }
- }
- //异常处理
- catch(Exception e)
- {
- throw new RuntimeException("键盘录入失败");
- }
- finally
- {
- if(bufr!=null)
- try
- {
-
- bufr.close();
- }
- catch(Exception e)
- {
- throw new RuntimeException("键盘录入关闭失败");
- }
- }
- return stus; //返回一个学生集合
- }
- //定义一个功能把学生集合,得到相应文件
- public static void write2File(Set<Student> stus)
- {
- //创建一个字符输出流
- BufferedWriter bufw=null;
- try
- {
- bufw=new BufferedWriter(new FileWriter("student.txt"));
-
- for(Student stu:stus)//遍历接受进来的集合
- {
- bufw.write(stu.toString()+"\t");//把学生信息写进目的文件
- bufw.write(stu.getSum()+""); //把总分写进目的文件
- bufw.newLine(); //换行
- bufw.flush();//刷新流
- }
- }
- //处理异常
- catch(Exception e)
- {
- throw new RuntimeException("文件写入失败");
- }
- finally
- {
- if(bufw!=null)
- try
- {
- bufw.close();
- }
- catch(Exception e)
- {
- throw new RuntimeException("文件关闭失败");
- }
-
- }
- }
- }
- class StudentTest
- {
- public static void main(String[] args)
- {
- Comparator<Student> cmp=Collections.reverseOrder();//逆转比较器
- //调用静态方法取得学生集合
- Set<Student> stus=StudentTool.getStudents(cmp);
- //调用静态方法把集合中的学生写到目的文件
- StudentTool.write2File(stus);
- }
- }
复制代码符号: 构造函数 TreeSet(java.lang.Comparable<Student>) 位置: 类 java.util.TreeSet<Student> stus=new TreeSet<Student>(cmp);//定义一个自定义排序的集合 ^ StudentTest.java:99: 找不到符号 符号: 构造函数 Student(java.lang.String,java.lang.Double,java.lang.Double) 位置: 类 Student Student stu=new Student(str[0],new Double(str[1]),new Double(str[2])); ^ StudentTest.java:173: 找不到符号 符号: 方法 getStudents(java.util.Comparator<Student>) 位置: 类 StudentTool Set<Student> stus=StudentTool.getStudents(cmp); ^ 3 错误
|
|