解决方案 »

  1.   


    import java.util.*;  
    class Person implements Comparable{    //实现了comparable接口,必须重写compareTo方法!!!  
        private String name;  
        private int age;  
        private float score;  
          
        public Person(String name,int age,float score){  
           this.name=name;  
           this.age=age;  
           this.score=score;  
           }  
          
       public String toString(){  
        return "姓名:"+this.name+", 年龄:"+this.age+", 成绩:"+this.score;  
        }  
         
        public int compareTo(Object obj){   //compareTo方法是实现  
         Person p = (Person)obj;  
                     if(p.score>this.score){  
                            return 1;  
                      }  
                      else if(p.score<this.score){  
                            return -1;  
                       }  
                       else{  
                            if(p.age>this.age){  
                             return 1;  
                            }  
                             else if(p.age<this.age){  
                             return -1;  
                             }  
                             else{  
                                 return 0;  
                                }  
                        }  
         }                            //compareTo方法结束  
    }                               //类结束  
    public class OOCompareTo{  
       public static void main(String []args){  
        Person p[] = new Person[5];  
        p[0] = new Person("张三 ",23,96);  
        p[1] = new Person("张三2",24,96);  
        p[2] = new Person("张三3",21,94);  
        p[3] = new Person("张三4",22,98);  
        p[4] = new Person("张三5",20,89);  
         
        Arrays.sort(p);                 //对数组p内的元素进行了遍历操作(排序) 默认的方法是compareTo  
        for(int x=0;x<p.length;x++){  
         System.out.println(p[x]);           //输出数组元素时默认的是toString()方法  
         }     
        }  
       }  
      

  2.   

    重写compareTo方法,简单点,下面的实现就可以了public int compareTo(Emp o) {
        if(o == null){
            throw new NullPointerException("参数不能为空");
        }
        return this.age - o.age;里面还可以加一些类型校验的代码进去
      

  3.   

    恩,是简单点这样写,但是我想知道他运行步骤,就是一个具体的运行过程中他是怎样调用的,settree和compareto下都只有方法声明,我找不到具体实现,不晓得他是哪继承来的,然后我就想用断点一步步看下,然后就出现了如题所说的问题感谢回复
      

  4.   

    Comparable 属于标记接口,实现它,必须重写compareTo方法,一楼的很详细了
    你说的settree 不知道是什么东东,可以讲详细一点,这样大家好出主意
    断点的时候,可以跟到compareTo方法里面去的,这个没有问题
    为什么this指代的和我O输入的是同一个变量,你的this和要对比的O是同一个对象吗?看看它的地址,是否相同
    或者是由同样的构造方法构造出来的,只是属性值相同 ,给你造成了同一个对象的假象