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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiahuiting 中级黑马   /  2013-10-11 09:27  /  1476 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-10-11 16:30 编辑

需求:想要键盘录入三学生的姓名及成绩,并按成绩总分的升序排列。
我写的代码,运行总是在以下标记行报错,想了一晚上了,还是不知道为啥。
import java.io.*;
import java.util.*;
class xuesheng
{
        public static void main(String[] args)throws Exception
        {
                TreeSet<Student>  ts  = new TreeSet<Student>();
                 Student s = new Student();
            
            for(int i=1;i<4;i++)                             //键盘录入三个学生信息,姓名加三门成绩,并按照成绩排序
                {                        
               

                    
                    System.out.println("请输入第" + i + "个学生姓名:");
               
                        BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
                    s.setName(bufr.readLine());
                  
                        System.out.println("请输入第 "+i+"个学生成绩1;");
                        BufferedReader bufr1 = new BufferedReader(new InputStreamReader(System.in));
                        s.setStore1(Double.parseDouble(bufr1.readLine()));
                        System.out.println("请输入第" + i + "个学生成绩2;");
                        BufferedReader bufr2 = new BufferedReader(new InputStreamReader(System.in));
                        s.setStore2(Double.parseDouble(bufr2.readLine()));
                        System.out.println("请输入第" + i + "个学生成绩3;");
                        BufferedReader bufr3 = new BufferedReader(new InputStreamReader(System.in));
                        s.setStore3(Double.parseDouble(bufr3.readLine()));
                        
                        ts.add(s);
//这里总是报错,Exception in thread "main" java.lang.ClassCastException: wo.Student cannot be cast to java.lang.Comparable
        at java.util.TreeMap.compare(Unknown Source)
        at java.util.TreeMap.put(Unknown Source)
        at java.util.TreeSet.add(Unknown Source)
        at wo.xuesheng.main(xuesheng.java:42)
                        
                        
                  }
            Iterator<Student> it = ts.iterator();
            while(it.hasNext())
            {
                    Student s1 = it.next();
                    System.out.println("姓名:"+s1.getName()+"   三门课成绩:  "+s1.getStore1()+"  ,  "+s1.getStore2()+"   ,  "+s1.getStore3()+"   总成绩    "+s1.getSum()+";");
            }
               
                  }
               
               
               
           }
        
class Student  implements Comparator<Object>
{
        private String name;
        private double store1;
        private double store2;
        private double store3;
        public void setName(String name)
        {
                this.name = name;
        }
        public void setStore1(double store1)
                {
                this.store1 = store1;
                }
        public void setStore2(double store2)
        {
        this.store2 = store2;
        }public void setStore3(double store3)
        {
        this.store3 = store3;
        }
        public  double getStore1()
        {
                double s = store1;
                return s;
        }public  double getStore2()
        {
                double s = store2;
                return s;
        
        }
        public  double getStore3()
        {
                double s = store3;
                return s;
        }
        public  String getName()  
        {
                return name;
        }
        public  double getSum()
        {
                double s = store1+store2+store3;
                return s;
        }
        public int compare(Object obj1,Object obj2)
        {
                if(!( obj1 instanceof Student) & !( obj2 instanceof Student))
                {
                        throw new         RuntimeException("duixiangcuowu");
                }
                Student s1 = (Student)obj1;
                Student s2 = (Student)obj2;
                int num = new Double(s1.getSum()).compareTo(new Double(s2.getSum()));
                if(num == 0)
                        return s1.getName().compareTo(s2.getName());
                return num;
               
               
        }}
        

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
在学生类里面应该是实现comparable接口 复写它的comparaTo方法

你实现的是comparator接口
如果你想定义自己的特有比较方法的话 你就实现comparator接口 复写它的compara方法
并且你在创建集合的时候 需要将你的比较器传给集合

还有 你代码中这样new 学生对象的话 最后你集合中只有一个学生对象 应该将创建对象的动作放在for循环里面:
......
Student s = null;
            
            for(int i=1;i<4;i++)                           
                {                        
                    s=new Student();
                    System.out.println("请输入第" + i + "个学生姓名:");
               ..........

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报

  1. import java.io.*;
  2. import java.util.*;

  3. public class xusheng {
  4.         public static void main(String[] args) throws Exception {
  5.                 TreeSet<Student> ts = new TreeSet<Student>();

  6.                 for (int i = 1; i < 4; i++) // 键盘录入三个学生信息,姓名加三门成绩,并按照成绩排序
  7.                 {
  8.                         Student s = new Student();
  9.                         System.out.println("请输入第" + i + "个学生姓名:");

  10.                         BufferedReader bufr = new BufferedReader(new InputStreamReader(
  11.                                         System.in));
  12.                         s.setName(bufr.readLine());

  13.                         System.out.println("请输入第 " + i + "个学生成绩1;");
  14.                         BufferedReader bufr1 = new BufferedReader(new InputStreamReader(
  15.                                         System.in));
  16.                         s.setStore1(Double.parseDouble(bufr1.readLine()));
  17.                         System.out.println("请输入第" + i + "个学生成绩2;");
  18.                         BufferedReader bufr2 = new BufferedReader(new InputStreamReader(
  19.                                         System.in));
  20.                         s.setStore2(Double.parseDouble(bufr2.readLine()));
  21.                         System.out.println("请输入第" + i + "个学生成绩3;");
  22.                         BufferedReader bufr3 = new BufferedReader(new InputStreamReader(
  23.                                         System.in));
  24.                         s.setStore3(Double.parseDouble(bufr3.readLine()));

  25.                         ts.add(s);
  26.                         // 这里总是报错,Exception in thread "main" java.lang.ClassCastException:
  27.                         // wo.Student cannot be cast to java.lang.Comparable
  28.                         // at java.util.TreeMap.compare(Unknown Source)
  29.                         // at java.util.TreeMap.put(Unknown Source)
  30.                         // at java.util.TreeSet.add(Unknown Source)
  31.                         // at wo.xuesheng.main(xuesheng.java:42)

  32.                 }
  33.                
  34.                
  35.                
  36.                 Iterator<Student> it = ts.iterator();
  37.                 while (it.hasNext()) {
  38.                         Student s1 = it.next();
  39.                         System.out.println("姓名:" + s1.getName() + "   三门课成绩:  "
  40.                                         + s1.getStore1() + "  ,  " + s1.getStore2() + "   ,  "
  41.                                         + s1.getStore3() + "   总成绩    " + s1.getSum() + ";");
  42.                 }
  43.        
  44.         }

  45. }

  46. class Student implements Comparable<Object> {
  47.         private String name;
  48.         private double store1;
  49.         private double store2;
  50.         private double store3;

  51.         public void setName(String name) {
  52.                 this.name = name;
  53.         }

  54.         public void setStore1(double store1) {
  55.                 this.store1 = store1;
  56.         }

  57.         public void setStore2(double store2) {
  58.                 this.store2 = store2;
  59.         }

  60.         public void setStore3(double store3) {
  61.                 this.store3 = store3;
  62.         }

  63.         public double getStore1() {
  64.                 double s = store1;
  65.                 return s;
  66.         }

  67.         public double getStore2() {
  68.                 double s = store2;
  69.                 return s;

  70.         }

  71.         public double getStore3() {
  72.                 double s = store3;
  73.                 return s;
  74.         }

  75.         public String getName() {
  76.                 return name;
  77.         }

  78.         public double getSum() {
  79.                 double s = store1 + store2 + store3;
  80.                 return s;
  81.         }
  82. /*
  83.         public int compare(Object obj1, Object obj2) {
  84.                 if (!(obj1 instanceof Student) && !(obj2 instanceof Student)) {
  85.                         throw new RuntimeException("duixiangcuowu");
  86.                 }
  87.                 Student s1 = (Student) obj1;
  88.                 Student s2 = (Student) obj2;
  89.                 int num = new Double(s1.getSum()).compareTo(new Double(s2.getSum()));
  90.                 if (num == 0)
  91.                         return s1.getName().compareTo(s2.getName());
  92.                 return num;

  93.         }
  94. */
  95.         public int compareTo(Object arg0) {
  96.                 if (!(arg0 instanceof Student)) {
  97.                         throw new RuntimeException("duixiangcuowu");
  98.                 }
  99.                 Student s2 = (Student) arg0;
  100.                 int num = new Double(this.getSum()).compareTo(new Double(s2.getSum()));
  101.                 if (num == 0)
  102.                         return this.getName().compareTo(s2.getName());
  103.                 return num;
  104.         }
  105. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 新人鼓励 。多来论坛发帖

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-11 11:07:26
板凳


楼主你好。如果问题已解决请及时将帖子状态改为提问结束,如果未解决请继续提问。谢谢合作
回复 使用道具 举报
本帖最后由 hyz123456 于 2013-10-11 15:21 编辑

实现comparable接口 复写的是compareTo方法 !
实现comparator接口 复写的是compare方法 !

写代码的时候要注意啊少年!@睡不够的猪
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马