2017-09-30 71 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谢谢,这是一个好点 –

相关问题