2015-02-05 76 views
-1

該方法應該找到Collection中的最大值大於該鍵的值。我不斷得到一個java.lang.UnsupportedOperationException,我不知道如何解決它。預先感謝您的幫助。修復java.lang.UnsupportedOperationException

public static <T> T ceiling(Collection<T> c, T key, Comparator<T> comp) { 
    T ceiling = null; 
    if (c == null || comp == null) { 
    throw new IllegalArgumentException(); 
    } 
    else if (c.size() == 0) { 
    throw new NoSuchElementException(); 
    } 
    else { 
    Iterator<T> itr = c.iterator(); 
    while (itr.hasNext()) { 
     if (comp.compare(itr.next(), key) < 0) { 
      itr.remove(); 
     } 
    } 
    } 
    if (c.size() == 0) { 
    throw new NoSuchElementException(); 
    } 
    else { 
    Iterator<T> itr2 = c.iterator(); 
    ceiling = itr2.next(); 
    while (itr2.hasNext()) { 
     T temp2 = itr2.next(); 
     if (comp.compare(temp2, ceiling) < 0) { 
      ceiling = temp2; 
     } 
    } 
    } 
    return ceiling; 
} 
+2

請發表您的代碼中的錯誤消息和堆棧跟蹤過。 – 2015-02-05 21:26:12

+3

請參閱[什麼是堆棧跟蹤,以及如何使用它來調試我的應用程序錯誤?](http://stackoverflow.com/q/3988788/217324) – 2015-02-05 21:28:00

+0

不錯的方法。那麼,你會在哪條線上得到例外? – 2015-02-05 21:30:27

回答

5

很可能你試圖修改一個不可修改的集合。

我建議你改變方法不要修改集合。 (另外,我建議你閱讀堆棧跟蹤,瞭解這意味着什麼)

像這樣的事情

public static <T> T ceiling(Collection<T> c, T key, Comparator<T> comp) { 
    if (c == null || comp == null) 
     throw new NullPointerException(); 
    T ret = null; 
    for (T t : c) 
     if (comp.compare(t, key)>=0 && (ret==null || comp.compare(t, ret)<0)) 
      ret = t; 
    return ret; 
} 
相關問題