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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぺsimon☆ 中级黑马   /  2013-5-2 22:19  /  1142 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ぺsimon☆ 于 2013-5-2 23:34 编辑
  1. <div class="blockcode"><blockquote>/*
  2. 有个5个学生,每个学生有3门课的成绩
  3. 从键盘输入以上数据,包括姓名和三门课成绩
  4. 输入格式:zhangsan,20,40,60
  5. 并把学生的信息和计算出的总分数高低顺序存放在磁盘文件


  6. */

  7. import java.io.*;
  8. import java.util.*;
  9. //定义一个学生类
  10. class Student implements Comparable<Student>
  11. {
  12.         private String name; //姓名
  13.         private double ma,cn,en; //三门课程的分数
  14.         private double sum;  //总分
  15.         Student(String name,double ma,double cn,double en) //构造函数初始化
  16.         {
  17.         this.name=name;
  18.         this.ma=ma;
  19.         this.en=en;
  20.         this.cn=cn;
  21.         sum=ma+cn+en; //总分
  22.         }
  23.         public void setName(String s) //函数修改学生姓名
  24.         {
  25.          this.name=name;
  26.         }

  27.         public String getName() //获取学生姓名
  28.         {
  29.         return this.name=name;
  30.         }

  31.         public double getSum() //获取总分
  32.         {
  33.         return this.sum=sum;
  34.         }
  35.         public int compareTo(Student s) //覆盖compareTo()方法
  36.         {
  37.         int num=new Double(this.sum).compareTo(new Double(s.sum));
  38.         if(num==0)
  39.         return this.name.compareTo(s.name);
  40.         return num;
  41.         }
  42.         public int hashCode() //覆盖hashCode()方法
  43.         {
  44.         return this.name.hashCode()+(int)sum*31;
  45.         }

  46.         public boolean equals(Object obj)//覆盖equals方法
  47.         {
  48.         if(!(obj instanceof Student))
  49.         throw new ClassCastException("类型不匹配");
  50.         
  51.         Student stu=(Student)obj;
  52.         return this.name.equals(stu.name)&&this.sum==stu.sum;
  53.         }

  54.         public String toString()//覆盖toString方法
  55.         {
  56.         return "Student["+name+", "+ma+", "+cn+", "+en+"]";
  57.         }
  58. }


  59. class StudentTool
  60. {

  61.         public static Set<Student> getStudents()//这个得到的是自然排序的集合
  62.         {
  63.         return getStudents(null);
  64.         }

  65.         //这个是有比较器的集合
  66.         public static Set<Student> getStudents(Comparable<Student> cmp)
  67.         {
  68.         Set<Student> stus=null;
  69.         if(cmp==null)
  70.         stus=new TreeSet<Student>(); //定义一个自然排序的treeSet集合

  71.         else
  72.         stus=new TreeSet<Student>(cmp);//定义一个自定义排序的集合
  73.         //创建一个字符流,以便键盘录入
  74.         BufferedReader bufr=null;
  75.         try
  76.         {
  77.         bufr=new BufferedReader(new InputStreamReader(System.in));

  78.         String line=null;
  79.         while((line=bufr.readLine())!=null)
  80.         {
  81.         if(line.equals("over"))//键盘录入的退出条件
  82.         break;

  83.         String[] str=line.split(","); //用","切割从键盘读取到的字符串
  84.         //创建学生对象
  85.         Student stu=new Student(str[0],new Double(str[1]),new Double(str[2]));
  86.         stus.add(stu);//把学生对象添加到集合
  87.         
  88.         }
  89.         }

  90.         //异常处理
  91.         catch(Exception e)
  92.         {
  93.         throw new RuntimeException("键盘录入失败");
  94.         }
  95.         finally
  96.         {
  97.         if(bufr!=null)
  98.         try
  99.         {
  100.         
  101.         bufr.close();
  102.         }
  103.         catch(Exception e)
  104.         {
  105.         throw new RuntimeException("键盘录入关闭失败");
  106.         }
  107.         }
  108.         return stus; //返回一个学生集合
  109.         }

  110.         //定义一个功能把学生集合,得到相应文件
  111.         public static void write2File(Set<Student> stus)
  112.         {
  113.         //创建一个字符输出流
  114.         BufferedWriter bufw=null;
  115.         try
  116.         {
  117.         bufw=new BufferedWriter(new FileWriter("student.txt"));
  118.         
  119.         for(Student stu:stus)//遍历接受进来的集合
  120.         {
  121.         bufw.write(stu.toString()+"\t");//把学生信息写进目的文件
  122.         bufw.write(stu.getSum()+""); //把总分写进目的文件
  123.         bufw.newLine(); //换行
  124.         bufw.flush();//刷新流
  125.         }
  126.         }
  127.         //处理异常
  128.         catch(Exception e)
  129.         {
  130.         throw new RuntimeException("文件写入失败");
  131.         }

  132.         finally
  133.         {
  134.         if(bufw!=null)
  135.         try
  136.         {
  137.         bufw.close();
  138.         }

  139.         catch(Exception e)
  140.         {
  141.         throw new RuntimeException("文件关闭失败");
  142.         }

  143.         
  144.         }
  145.         }
  146. }

  147. class StudentTest
  148. {
  149.         public static void main(String[] args)
  150.         {
  151.         Comparator<Student> cmp=Collections.reverseOrder();//逆转比较器
  152.         //调用静态方法取得学生集合
  153.         Set<Student> stus=StudentTool.getStudents(cmp);
  154.         //调用静态方法把集合中的学生写到目的文件
  155.         StudentTool.write2File(stus);
  156.         }
  157. }
复制代码
符号: 构造函数 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 错误


5 个回复

倒序浏览
本帖最后由 吴传淦 于 2013-5-2 22:58 编辑

你原代码77行:public static Set<Student> getStudents(Comparable<Student> cmp)
改为:        public static Set<Student> getStudents(Comparator<Student> cmp)
原代码99行:Student stu=new Student(str[0],new Double(str[1]),new Double(str[2]));
改为        Student stu=new Student(str[0],new Double(str[1]),new Double(str[2]),new Double(str[3]));
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(Comparator<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]),new Double(str[3]));
        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);
        }
}
回复 使用道具 举报

回复 使用道具 举报
谭威 发表于 2013-5-2 22:59

谢谢你兄弟,可以了
回复 使用道具 举报
吴传淦 发表于 2013-5-2 22:55
你原代码77行:public static Set getStudents(Comparable cmp)
改为:        public static Set getStude ...

谢谢你,兄弟程序行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马