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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Sword 于 2013-6-6 18:54 编辑

知道是重写接口方法那得的问题,改了好久改不过来,求解
public class Student implements Comparable{
        
        private String name;
        private int age;
        
        public Student(){};
        
        public Student(String name,int age){
                this.name = name;
                this.age = 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;
        }
//重写comparable接口的方法:
        public int compareTo(Object obj) {
                if(!(obj instanceof Student)){
                        Student s = (Student)obj;
                        if(this.age > s.age){
                                return 1;
                        }else if(this.age == s.age){
                                return this.name.compareTo(s.name);
                        }else{
                                return -1;
                        }
                }
                return age ;  //应该是这的问题,毕老师的视频中if语句都没加{}我在MyEslise中加上就乱了  求解
        }
}
public class TreeSetDemo {
        
        public static void main(String[] args) {
               
                TreeSet ts = new TreeSet();
               
                ts.add(new Student("张三",20));
                ts.add(new Student("李四",22));
                ts.add(new Student("王五",24));
                ts.add(new Student("赵六",26));
                ts.add(new Student("赵六",26));
               
                for(Iterator it = ts.iterator(); it.hasNext();){
                        Student s = (Student)it.next();//向下转型
                        System.out.println(s.getName() + "-->" + s.getAge());
                        
                }
        }

}

评分

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

查看全部评分

6 个回复

倒序浏览
  1. // 重写comparable接口的方法:
  2.         public int compareTo(Object obj) {
  3.                 System.out.println(!(obj instanceof Student));
  4.                 if (obj instanceof Student) {
  5.                         Student s = (Student) obj;
  6.                         if (this.age > s.age) {
  7.                                 return 1;
  8.                         } else if (this.age == s.age) {
  9.                                 return this.name.compareTo(s.name);
  10.                         } else {
  11.                                 return -1;
  12.                         }
  13.                 }
  14.                 return age;
  15.         }
复制代码
把那行判断是不是Student的实例前的!去掉就行了,因为你传入的都是Student的实例,就是说System.out.println(!(obj instanceof Student));打印出来为false了,改一下就好了。

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 风乐 于 2013-6-4 18:48 编辑

//知道是重写接口方法那得的问题,改了好久改不过来,求解

public class Student implements Comparable{
        
        private String name;
        private int age;
        
        public Student(){};
        
        public Student(String name,int age){
                this.name = name;
                this.age = 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;
        }
//重写comparable接口的方法:
        public int compareTo(Object obj) {
                        //这里写错了,不该加那个!,否则传入的student对象全不符合if条件,if内语句不执行,直接返回age,是非0数,肯定无法保证唯一了
                if(!(obj instanceof Student)){
                        Student s = (Student)obj;
                        if(this.age > s.age){
                                return 1;
                        }else if(this.age == s.age){
                                return this.name.compareTo(s.name);
                        }else{
                                return -1;
                        }
                }
                return age ;  //应该是这的问题,毕老师的视频中if语句都没加{}我在MyEslise中加上就乱了  求解
        }
}
public class TreeSetDemo {
        
        public static void main(String[] args) {
               
                TreeSet ts = new TreeSet();
               
                ts.add(new Student("张三",20));
                ts.add(new Student("李四",22));
                ts.add(new Student("王五",24));
                ts.add(new Student("赵六",26));
                ts.add(new Student("赵六",26));
               
                for(Iterator it = ts.iterator(); it.hasNext();){
                        Student s = (Student)it.next();//向下转型
                        System.out.println(s.getName() + "-->" + s.getAge());
                        
                }
        }

}

评分

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

查看全部评分

回复 使用道具 举报
风乐 发表于 2013-6-4 18:47
//知道是重写接口方法那得的问题,改了好久改不过来,求解

public class Student implements Comparable{

解决了
回复 使用道具 举报
问题已解决的话,请及时修改分类,谢谢合作!
回复 使用道具 举报
Sword 发表于 2013-6-6 11:23
问题已解决的话,请及时修改分类,谢谢合作!

在哪里修改  原来重新编辑就能修改, 现在我试了试 不可以重新编辑,   该怎么修改
回复 使用道具 举报
山鹰 发表于 2013-6-6 18:32
在哪里修改  原来重新编辑就能修改, 现在我试了试 不可以重新编辑,   该怎么修改 ...

已经帮你修改了,还是原来的方法,可以的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马