2015-05-04 67 views
0

我已經寫了這個問題的答案,但是,它的Netbeans顯示了一個錯誤,在這條線:的CompareTo方法與列表

 if (key.compareTo(obj) <= 1) 

的問題是: 寫這需要一個靜態方法具有自然順序的對象的列表或對象,List或Set的基類型的對象 以及整數n,如果列表或集合中至少有n個對象大於對象參數,則返回true以其自然順序,否則爲假 。

我嘗試:

public static <T extends Comparable<? super T>> boolean question9(List<T> list, List obj, int n) { 

      int count = 0; 
      for (T key : list) { 
       if (key.compareTo(obj) <= 1) { 
        count++; 
       } 
      } 
      if (n > count) { 
       return false; 
      } else { 
       return true; 
      } 
     } 
+0

「顯示錯誤」。你能更具體一點嗎?同樣,重新編寫這個:if(n> count){return 0; false; return false; } else { return true; }作爲返回n <= count; 更容易閱讀 – Stultuske

+0

爲什麼它是'List obj'?另外,'key.compareTo(obj)<= 1'永遠不是正確的檢查。 – user2357112

回答

1

你的任務說(重點煤礦):

寫這需要一個列表或者有自然順序的對象設置一個靜態方法,的列表或集的基本類型的對象

這並不意味着objListSet!這意味着obj必須是T

另外,你的測試不好。該Comparable合同說,兩個對象xyx被認爲大於y如果x.compareTo(y)大於0

測試因此更改爲:

if (key.compareTo(obj) > 0) 

此外,您的最終測試可以簡化於:

return count >= n; 

,你甚至可以通過快捷鍵:

public static <T extends Comparable<? super T>> boolean question9(
    final Collection<T> collection, // assignment says List or Set 
    final T obj, int n) 
{ 
    int count = 0; 
    for (final T element: collection) { 
     if (element.compareTo(obj) <= 0) 
      continue; 
     if (++count >= n) 
      return true; 
    } 
    return false; 
} 
+0

Ohhhhh這是有道理的......因爲obj也需要是通用的,因爲如果List是一個Integer,那麼obj也應該是一個Integer ..我想!一旦計時器到期,謝謝您將標記正確 – Aceboy1993

+0

還有一個問題,那就是您的測試。查看更新的答案。 – fge

+0

啊,是的,我的另一個愚蠢的錯誤,謝謝你指出。 – Aceboy1993