2012-04-28 58 views
-1

我被困在下面的问题我:现在用的是compareTo方法正确

研究下面的Java类头文件和代码段:

class ExamScript implements Comparable<ExamScript> 
{ 
    private String studentName; 
    private int mark; 
    ...rest of class... 

    /** 
     * Compares this object with the specified object for e 
     *@param e the object to be compared 
     *@return -1 if object is less than the specified object 
     *@return 0 if object is equal to the specfied object 
    **/ 
     public int compareTo(ExamScript e) 
     { 
     if (mark < e.mark) 
      return - 1; 
     if (mark == e.mark) 
      return 0; 
     return 1; 
     } 
} 

给了compareTo方法适合文档。特别说明从这个方法返回的值的含义。

根据您的规范书写compareTo方法的代码。

我已经记录并编写了如上所示的代码。任何人都可以证实我是否可以改进我的文档/编码,或者如果这样很好吗?

+0

当你测试代码?方案是否表现为你会希望它的行为会发生什么? – 2012-04-28 19:03:12

+2

所属的“代码审查”的网站。 – Alnitak 2012-04-28 19:05:19

回答

1

确保添加@returns 1 if e is greater than this object.

您可以更具体与您的@Returns。尝试使用上面使用的格式。另外,如果从阅读代码中不明显,试着解释标记是什么,以及为什么用它来比较。

查看Oracle's standards了解更多信息。

1

我看到它,当等级相等的学生被认为是相等的(至少在算法假定a.compareTo(b)==0意味着a.equals(b)根据您的使用,这可能是一件好事

但如果它是坏的,你可以解决这个问题这种通过比较名称而不是返回0

public int compareTo(ExamScript e) 
{ 
    if (mark < e.mark) 
     return - 1; 
    if (mark == e.mark) 
     return studentName.compareTo(e.studentName); 
    return 1; 
} 
+1

这是为什么不应该使用compareTo来代替equals。根据定义,compareTo ret根据自然顺序来排列相对级别,并且与平等无关。假定这两者相关的程序正在使用该方法,但并不打算使用该方法 - 除非实施此方法的类的文档具体另有说明。我认为这是一个非问题。 – 2012-04-28 20:22:34