2016-11-29 5 views
1

я получил ошибку при компиляции ниже код, который «несравнимые типы: Int и» на линии 10.Leetcode220 ошибка: несравнимые типы: INT и <null>

public class Solution { 
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { 
    if (nums == null || k <= 0 || t < 0 || nums.length < 2) return false; 

    TreeSet<Integer> set = new TreeSet<>(); 
    for (int i = 0; i < nums.length; i++) { 
     int floor = set.floor(nums[i] + t);//return largest number smaller than nums[i] + t or null 
     int ceil = set.ceiling(nums[i] - t);//return least number larger than num[i] - t or null 

     if ((floor != null && floor >= nums[i]) || (ceil != null && ceil <= nums[i])) { 
      return true; 
     } 

     set.add(nums[i]); 

     if (set.size() > k) { 
      set.remove(nums[i - k]); 
     } 
    } 

    return false; 
}} 

, но если добавить окончательное ключевое слово, прежде чем TreeSet , floor и ceil, код будет скомпилирован успешно. Может ли кто-нибудь помочь мне объяснить, что происходит? Благодарю.

... 
final TreeSet<Integer> set = new TreeSet<>(); 
for (int i = 0; i < nums.length; i++) { 
    final Integer floor = set.floor(nums[i] + t);//return largest number smaller than nums[i] + t or null 
    final Integer ceil = set.ceiling(nums[i] - t);//return least number larger than num[i] - t or null 
... 

ответ

3

int floor определяет floor в качестве основного int типа. Integer floor определяет floor как нетривиальный, class тип. null используется только с нетривиальными типами

0

Это не имеет никакого отношения к ключевому слову final (он будет работать без него в любом случае). Вы просто не можете сравнить примитивное значение (int) с null. Вместо этого вы должны использовать соответствующий объект (Integer).

 Смежные вопросы

  • Нет связанных вопросов^_^