尽管ceiling
类中存在floor
和TreeSet
函数,但我无法理解为什么会出现此错误。我收到以下错误:
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 :(得分:0)
这是因为您的set
变量类型为Set<Integer>
而非TreeSet<Integer>
或NavigableSet<Integer>
(TreeSet
实现的接口)。如果您想调用属于NavigableSet
的方法,则必须将局部变量set
的类型更改为NavigableSet<Integer>
,或者您可以在调用方法之前转换当前变量的方法,例如
((NavigableSet<Integer>) set).ceiling(nums[i]);
更改局部变量类型可能是更好的选择。
答案 1 :(得分:0)
更改
Set<Integer> set = new TreeSet<>();
要
TreeSet<Integer> set = new TreeSet<>();
您将能够调用这些方法。只有Set。
不存在天花板和地板的方法