2017-09-30 116 views
0

我不明白爲什麼我得到這個錯誤,儘管ceilingfloor函數存在於TreeSet類中。我收到以下錯誤:找不到符號:方法ceiling(int)

cannot find symbol: method ceiling(int) 

這裏是我的Java代碼:

import java.util.Set; 
import java.util.TreeSet; 

public static boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { 
    Set<Integer> set = new TreeSet<>(); 
    for (int i = 0; i<nums.length; i++) { 
     Integer x = set.floor(nums[i]); 
     if(x!= null && x<= nums[i]+t) 
      return true; 
     Integer y = set.ceiling(nums[i]); 
     if(y!= null && nums[i]<= y+t) 
      return true; 
     set.add(nums[i]); 
     if(set.size()>k) 
      set.remove(nums[i-k]); 


    } 
    return false; 
} 
+0

什麼是Integer x = set。(nums [i]);'應該是? –

+0

哎呀..我在複製粘貼之前嘗試了不同的東西..它應該是set.floor(nums [i])。 –

回答

0

變化

Set<Integer> set = new TreeSet<>(); 

TreeSet<Integer> set = new TreeSet<>(); 

,你將能夠調用的方法。 Set的方法不存在ceiling和floor方法。

+0

謝謝了。不敢相信我犯了這麼愚蠢的錯誤:) –

0

這是因爲你的set變量類型爲Set<Integer>,而不是TreeSet<Integer>NavigableSet<Integer>(一個接口,TreeSet工具)。如果您想調用屬於NavigableSet的方法,則必須將您的本地變量set的類型更改爲NavigableSet<Integer>,或者您可以在調用方法之前投射當前變量,例如,

((NavigableSet<Integer>) set).ceiling(nums[i]); 

雖然更改局部變量類型會更好。

+1

另外,''ceiling'確實存在於['NavigableSet ''(https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html)接口 – Powerlord

+0

@Powerlord謝謝,這是一個好點 –

相關問題