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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄敏 于 2012-8-16 00:38 编辑

class Student implements Comparable<Student>{
        private String name;
        private int age;
        private int score;
        public Student(String name, int age){
                this.setName(name);
                this.setAge(age);
               
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        public int getScore() {
                return score;
        }
        public void setScore(int score) {
                this.score = score;
        }
        
        public String toString(){
                return "姓名: " + this.name + ",年龄: " + this.age ;
        }
        
        public int hashCode(){
                return name.hashCode()+ age*13;
        }
        
        public boolean equals(Object obj){
                if (!(obj instanceof Student))
                        throw new RuntimeException();
                Student stu = (Student) obj;
                return this.name.equals(stu.name)&& this.age==stu.age ;
        }
        
        public int compareTo(Student stu){
                if (this.getAge() > stu.getAge())
                return -1;
                if(this.score== stu.score){
                        stu.getName().compareTo(this.getName());
                }
                return 1;
        }

}

class MyComparator implements Comparator<Student>{
        
        public int compare(Student o1, Student o2){

                int n = new Integer(o1.getAge()).compareTo(new Integer(o2.getAge()));
                if(n==0)
                        return o1.getName().compareTo(o2.getName());
                return n;
        }
}

public class Test10 {

        public static void main(String[] args) {
                TreeMap<Student, Integer> mp = new TreeMap<Student, Integer>();
                mp.put(new Student("张三",17), 89);
                mp.put(new Student("李四",18), 90);
                mp.put(new Student("马六",18), 97);
                mp.put(new Student("王五",17), 91);
                //第一种取出方式:keySet
               
                Set<Student> se = mp.keySet();
                Iterator<Student> it = se.iterator();
                while (it.hasNext()){
                        Student stu =it.next();
                        int val = mp.get(stu);      //运行到这的时候出现NullPointerException异常,求真相,没找出来什么原因,我也么发现我哪里写错了啊
                        System.out.println(stu +",成绩: "+ val);
                }        
        }
}

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

5 个回复

正序浏览
陈汉维 发表于 2012-8-16 00:32
你的compareTo中判断成绩是否相等少了return 。加上就OK了

谢谢,兄台。我太粗心了,
回复 使用道具 举报
  1. public int compareTo(Student stu){
  2.                 if (this.getAge() > stu.getAge())
  3.                                         return -1;
  4.                 if(this.score== stu.score){
  5.                        return stu.getName().compareTo(this.getName());
  6.                 }
  7.                 return 1;
  8.         }
复制代码
你的compareTo中判断成绩是否相等少了return 。加上就OK了

评分

参与人数 1技术分 +5 收起 理由
张立江 + 5 给你加5分!反正你分多了也没用(~.~).

查看全部评分

回复 使用道具 举报
黑马张涛 发表于 2012-8-16 00:19
两种方式改,第一种,将TreeMap改为HashMap,这样才会调用你写的HashCode和equals方法对集合排序。第二种, ...

哥们,你没看到代码中的Student类已经实现了Comparable接口了?Student可以比较了
回复 使用道具 举报
两种方式改,第一种,将TreeMap改为HashMap,这样才会调用你写的HashCode和equals方法对集合排序。第二种,使用TreeMap,传一个比较器给他。
回复 使用道具 举报
看来还是没人能找出来,头大了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马