2017-09-30 2 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

「整数x =セット(nums [i]);」とは何ですか? –

+0

私はコピー貼り付ける前に違うことをしようとしていました。それは設定されていたはずです。床(nums [i])。 –

答えて

0

変更

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

、あなたがメソッドを呼び出すことができるようになります。天井と床のメソッドは、単にSetのために存在しません。

+0

ありがとう。私はそのような愚かな間違いをしたとは信じられない:) –

0

あなたset変数の型がSet<Integer>ないTreeSet<Integer>またはNavigableSet<Integer>TreeSet実装インタフェース)であるため、それが起こります。 NavigableSetに属するメソッドを呼び出す場合は、ローカル変数setの型をNavigableSet<Integer>に変更するか、メソッドを呼び出す前に現在の型をキャストすることができます。

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

ただし、ローカル変数の型を変更する方が適切です。

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

+1

「天井」は、[NavigableSet '](https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html)インタフェース – Powerlord

+0

@Powerlordにあります。ありがとう、それは良い点です –

関連する問題