2011-09-21 127 views
2

我試圖重寫可比正是如此:java的實現比較兩個元素

public int compareTo(Object other) {   
    if(other.getlength() > this.getlength()){ 
     return 1; 
    } else if (other.getlength() < this.getlength()){ 
     return -1; 
    } else { 
     if (other.getVal() > this.getVal()){ 
      return 1; 
     } else { 
      return -1; 
     } 
    } 
} 

我希望發生的,是對長度的第一排序列表中,如果長度是一樣的,我希望那些相同的長項目按其價值進行排序(到位)。但是我的實現工作不正常。任何人都可以看到我做錯了什麼?

我的結果是:

a b = 3 
a b c = 1 
a b c = 1 
a b = 2 
a b = 1 

我想要的結果是:

a b c = 1 
a b c = 1 
a b = 3 
a b = 2 
a b = 1 
+1

如果長度和Val相同會怎麼樣?你永遠不會返回0. –

+1

我不明白你的問題:(( –

+0

我試過else,在else循環內返回0,即如果other.getVal()== this.getVal()那麼它將返回0,但結果相同 – Neutralise

回答

2

儘可能避免邏輯。認真 - 在可行的情況下,使用算術來避免if/else。它往往更可靠。在這種情況下:

public int compareTo(Object o) {   
    int ret = other.getlength() - this.getlength(); 
    if (ret == 0) { 
    ret = other.getVal() - this.getVal(); 
    } 
    return ret; 
} 
+0

完美。謝謝,還有一個不錯的提示。 – Neutralise

0

它不是從你的話該列表將已排序或不清晰。但你可以通過比較長度後對列表進行排序來處理。但在你明顯做錯的事情上是object.getValue()...這沒有意義,你必須遍歷這兩個列表並比較值,以得出它們是否相等。

如果沒有例子對上面的評論抱歉,這是不明顯的,這是不可能與你的比較器有這個結果。你的邏輯看起來對我很正確。但是,如果合併w00t的註釋也是一個好主意,否則你將有一個<'b以及a> b並且可能導致運行時錯誤。請檢查比較器是否正確應用於您的排序功能(對象)。

+0

w00te的評論有正確的答案。您可能想刪除您的編碼。 –