2017-09-30 2 views
0

Ich kann nicht verstehen, warum ich diesen Fehler trotz ceiling und floor Funktionen in der TreeSet Klasse erhalten. Ich erhalte folgende Fehlermeldung:kann nicht finden Symbol: Methode Decke (int)

cannot find symbol: method ceiling(int) 

Hier ist mein Java-Code:

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

Was ist 'Integer x = set. (Nums [i]); soll es sein? –

+0

Hoppla .. habe verschiedene Dinge ausprobiert bevor ich kopierte-pastete .. Es sollte gesetzt werden.floor (nums [i]). –

Antwort

0

ändern

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

Um

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

und Sie werden die Methoden aufrufen können. Die Methoden Decke und Boden existieren nicht nur für Set.

+0

Danke eine Tonne. Ich kann nicht glauben, dass ich so einen dummen Fehler gemacht habe :) –

0

Es geschieht, weil Ihr set Variablentyp ist Set<Integer> und nicht TreeSet<Integer> oder NavigableSet<Integer> (eine Schnittstelle, die TreeSet Geräte). Wenn Sie eine Methode aufrufen möchten, die zu NavigableSet gehört, müssen Sie den Typ Ihrer lokalen Variablen set zu NavigableSet<Integer> ändern, oder Sie können vor dem Aufruf einer Methode, z.

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

Die Änderung des lokalen Variablentyps wäre jedoch die bessere Option.

+1

Nebenbei bemerkt, "Decke" existiert in der ['NavigableSet '] (https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html) Schnittstelle – Powerlord

+0

@Powerlord Danke , das ist ein guter Punkt –

Verwandte Themen