Я вижу три потенциальных проблемы с этим утверждением:
if (a.getTail().isEmpty())
return new List<Integer>(a.getHead(), new List<Integer>());
Во-первых, мы возвращаем a.getHead()
, даже не проверив, положительный или отрицательный. Во-вторых, мы создаем дополнительные List
без видимой причины. В-третьих, мы пытаемся создать экземпляр интерфейса, а не класса? В этом if
заявлении:
if (a.getHead() - a.getHead() == 0)
new List<Integer>(a.getHead(), new List<Integer>());
return positives(a.getTail());
Мы усложняем тест a.getHead() >= 0
без видимой причины; мы снова создаем дополнительный List
; мы создаем новую структуру, когда мы должны добавить к существующей структуре, возвращаемой positives()
.
(Не хватает .getHead() and .getTail()
) Вот как я мог бы поступить об этом:
static List<Integer> positives(List<Integer> a) {
List<Integer> non_negatives, tail = a.subList(1, a.size()); // tail = a.getTail()
if (tail.isEmpty())
non_negatives = new ArrayList<Integer>(); // need to create List to return
else {
non_negatives = positives(tail);
}
Integer head = a.get(0); // head = a.getHead()
if (head >= 0)
non_negatives.add(0, head);
return non_negatives;
}