2017-09-30 1 views
0

TreeSet 클래스에 ceilingfloor 함수가 있지만이 오류가 발생하는 이유를 알 수 없습니다. 나는 오류 다음 얻을 : 당신의 set 변수 유형이 Set<Integer>하지 TreeSet<Integer> 또는 NavigableSet<Integer> (인터페이스 TreeSet 구현) 때문에기호를 찾을 수 없습니다. 메서드의 ceiling (int)

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<>(); 

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

으로 당신은 메소드를 호출 할 수 있습니다. 천정과 바닥 방법은 단지 세트에만 존재하지 않습니다.

+0

고마워. 내가 바보 같은 실수를 저질렀다는 것을 믿을 수 없다. :) –

0

그런 일이 :

cannot find symbol: method ceiling(int) 

여기 내 자바 코드입니다. 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에 존재합니다. 감사합니다. 그건 좋은 지적 이네. –

관련 문제