【发布时间】:2016-04-23 16:01:24
【问题描述】:
我有一个Integer[21, 9, 13, 47, 5, 10, 19, 36, 20, 11, 13] 的列表,我正在尝试编写一个递归函数,它将原始列表中的所有其他整数作为列表返回
(即[21, 13, 5, 19, 20, 13])。
我正在使用 LispList 的自定义实现。该对象称为LispList,它是不可变的 并且(显然)没有索引。它提供了以下方法:
E head() - 返回调用它的列表的第一项。
LispList
LispList
boolean isEmpty() - 如果调用它的列表是空列表,则返回 true,否则返回 false。
静态
经过几个小时的尝试,我想出了一种方法,我使用初始化为 2 的计数器并使用它来跟踪偶数编号的元素,应将其取出并放入新的 LispList 并返回。
但是,当我运行代码时,它会抛出 NullPointerException,我不明白为什么。也许我只是盯着屏幕太久了!
这是从main调用的方法:
public static <T> LispList<T> pickEveryOther(LispList<T> ls) {
int counter = 2;
LispList<T> ls1 = pickEveryOtherHelper(ls.tail(), counter);
return ls1;
}
和辅助方法:
public static <T> LispList<T> pickEveryOtherHelper(LispList<T> ls, int counter) {
LispList<T> wantLs = LispList.empty();
if(ls.isEmpty()) {
return LispList.empty();
}
else {
if(counter % DIVIDER == 0) {
// item we want
wantLs = wantLs.cons(ls.head());
counter++;
}
else {
// don't want item, look in tail
pickEveryOtherHelper(ls.tail(), counter);
}
return wantLs;
}
}
非常感谢您的努力。
【问题讨论】:
-
DIVIDER=2顺便说一下(在方法pickEveryOtherHelper中)。这是一个全球性的,抱歉我忘了提。