2012-04-28 57 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