String name;
          public int compareTo(Object o)
{
Student s=(Student)o;

int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
if(i==0)
{
i=name.compareTo(s.name);
}
return i;
}
              这个是自己重写compareTo方法......有点想不通的是 最终只有一个 return 也就是只有一个返回
             那么它又是怎么根据字母的大小写来根据排序的了?   
                   也就是说 我的理解就是,不管怎么样 它都只返回了一个值,又怎么能将它进行字母的排序???
 
           疑惑不解中  静待高手解决 谢谢!!!1

解决方案 »

  1.   

    int i=num>s.num ? 1 : (num==s.num ? 0 : -1);//这里判断号码,号码不相等直接就返回结果了
    if(i==0)
    {
    i=name.compareTo(s.name);//这里如果号码相等的话,根据名字排序。
    }
    return i;
      

  2.   


    可是它根据名字排序 换回的也只是一个int类型啊.....外面又只有一个sort进行排序.
     
    是不是因为我们调用的name.compareTo()方法起到了作用了?  那么我们的 return i; 到底又是被谁接收了??  
      

  3.   


    public class Student {
    String name;
    int num;
    public Student (int num, String name) {
    this.name = name;
    this.num = num;
    }
    public int compareTo(Object o) {
    Student s = (Student)o;
    int i = this.num > s.num ? 1 : (this.num == s.num ? 0 : -1);
    if(i==0) {
    i=this.name.compareTo(s.name);
    }
    return i;
    }
    }代码补全了,this表示被比较的Student 对象,compareTo方法的传入参数object是比较对象。这不就是两个么?至于这个方法什么时候会用到,那要看你排序地方的结构了。 譬如java.util.List<Student> stdLst = new java.util.ArrayList<Student >(); 
    stdLst.add(new Student(1,"b"));
    stdLst.add(new Student(1,"a"));
    调用stdLst.sort();之后变成
    stdLst[
     new Student(1,"a")),
     new Student(1,"b")]
    博客内有更精彩的内容
      

  4.   

    compareTo方法实现了Comparable接口,它自己不排序,其他排序算法,例如Collections.sort()对这个对象比较大小时,调用compareTo来判断
      

  5.   


    Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object你这个一定是先按num排序,再按name 排序,
    至于你说sort,应该指的是有关Collection的sort 方法吧,它调用你现在重写的compareTo() 方法。
      

  6.   

    排序算法会调用compareTo函数,比较2个对象的排序顺序。int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
    if(i==0)
    {
    i=name.compareTo(s.name);
    }
    return i;
    这段代码里,首先按num来排序,如果num相同的情况下,执行name.compareTo(s.name) 按字母的大小写排序
    如果单纯只对字母排序,不考虑num,就只 return name.compareTo(s.name)就行了.
      

  7.   


    那么是不是sort方法 本身在调用的过程当中它就判断出来到底是要对谁来进行排序了?
      

  8.   

    String name;
      public int compareTo(Object o)
    {
    Student s=(Student)o;int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
    if(i==0)
    {
    i=name.compareTo(s.name);
    }
    return i;
    }
    这里变量i如果num大于s.num的话,就返回1;相等的话就返回0;小于的话就返回-1;
    Student有两个关键字,首先对num进行排序,如果num相等的话就再次对名字进行排序。
    两个对象比较,它一定会返回一个int类型的i,(可能为1,0,-1);这样就实现了排序的功能。
    如果是多个Student比较的话就要调用多次compareTo()方法。两辆之间进行比较。
      

  9.   

    -1 0 1
    < == >
      

  10.   

    你是要自动排序还是比较器排序  按你意思好像是要按字母顺序的话 就是用自动排序 自动排序要实现 Comparabl接口里的compareTo方法 。最后用ArrayS.sort() 或者ArrayList.sort()(取决你你)
      

  11.   

    int i=num>s.num ? 1 : (num==s.num ? 0 : -1);
    三元表达式
    下面代码要害看不懂,我也无奈了if(num > s.num){
    i = 1;
    }else if (num == s.num) {
    i = 0;
    }else{
    i = -1;
    }
    return i;
      

  12.   

    自己去查一下API里面 compareTo方法,里面说的很清楚了
      

  13.   

    关于你说按照字母排序的问题,建议你去看下String类的源码,String的本质是一个char[],char类型有三种表现形式
    char a;
    a='a';
    a=97;
    a='\0061';
    三种赋值方式出来的都是a
      

  14.   

      难道CSDN上就真的没有精通JAVA的人在这里玩么????? 
      

  15.   

    就你这么提问法精通的都不来回你问题了,早知道不回复你了,浪费我口水,说的很明白了,不知道还要怎么和你说,前面几楼的朋友也说的都很在点子上了,连翻翻API你都懒得做,那我们给你的答案你当然看不懂,一个三元表达式都看不懂,你让人怎么教你,要不要从数据结构,数据类型开始教你??
      

  16.   

      i=this.name.compareTo(s.name);
    这个comparTo到底是哪个comparTo自己不看看,name是什么类型的就是什么类的方法,自己不翻翻API,见过懒的没见过这么懒的
      

  17.   

    实现compareTo方法后,系统会根据compareTo方法的返回值进行判断,如studentA.compareTo(studentB) 如果返回值大于0则A排在B之前,如果小于0则A排在B之后,如果等于0则位置等同
      

  18.   

    上面说的对,自己下载一个API文档,自己解决比较好,而且你以后也记得更深!
      

  19.   

    sort(List list) 会自动调用list里放置对象的compareTo()方法来比较两个对象的大小
    根据compareTo()返回的值来对list进行排序