2015-05-04 4 views
0

Я написал ответ на этот вопрос, но на Netbeans он показывает ошибку на этой линии:методы CompareTo из сравнимых с списком

 if (key.compareTo(obj) <= 1) 

Возникает вопрос: Написать статический метод, который принимает Список или набор объектов, которые имеют естественный порядок, объект базового типа списка или набора и целое число n и возвращает значение true, если хотя бы n объектов в списке или наборе больше, чем аргумент объекта согласно в их естественном порядке, false в противном случае.

Моя попытка:

public static <T extends Comparable<? super T>> boolean question9(List<T> list, List obj, int n) { 

      int count = 0; 
      for (T key : list) { 
       if (key.compareTo(obj) <= 1) { 
        count++; 
       } 
      } 
      if (n > count) { 
       return false; 
      } else { 
       return true; 
      } 
     } 
+0

"показывает ошибку". Можете ли вы быть более конкретным? также, перепишите это: if (n> count) { return false; } else { return true; } в качестве возврата n <= count; намного легче читать – Stultuske

+0

Почему это 'List obj'? Кроме того, 'key.compareTo (obj) <= 1' никогда не является правильной проверкой. – user2357112

ответ

1

Ваше задание говорит (курсив мой):

Написать статический метод, который принимает список или набор объектов, которые имеют естественный порядок, в объект базового типа списка или набора

Это не означает, что obj является List или Set! Это означает, что obj должен быть T.

Кроме того, ваш тест не является хорошим. Comparable контракт говорит, что для двух объектов x и y, x считается более y если x.compareTo(y) больше 0.

Поэтому изменить тест:

if (key.compareTo(obj) > 0) 

Кроме того, ваш последний тест может быть упрощена чтобы:

return count >= n; 

и вы можете даже ярлык:

public static <T extends Comparable<? super T>> boolean question9(
    final Collection<T> collection, // assignment says List or Set 
    final T obj, int n) 
{ 
    int count = 0; 
    for (final T element: collection) { 
     if (element.compareTo(obj) <= 0) 
      continue; 
     if (++count >= n) 
      return true; 
    } 
    return false; 
} 
+0

Ohhhhh, что имеет смысл ... потому что obj также должен быть общим, потому что если List был Integer, тогда obj также должен быть Integer .. Я думаю! Спасибо, отметит правильность, как только таймер истечет – Aceboy1993

+0

. Есть еще одна проблема, и это с вашим тестом. См. Обновленный ответ. – fge

+0

Ах, да, еще одна глупая ошибка, спасибо за то, что вы указали это. – Aceboy1993