我编写了以下代码来计算LinkedList
中所有偶数条目的总和。但是,由于我使用NullPointerException
的行,我一直收到(n.getNext).getNext()
任何人都可以告诉我为什么会这样吗?
以下是我所指的代码:
public int sumEven() {
return sumEven(head);
}
// private sumEven helper
private int sumEven(IntListNode n) {
int nodeNumber=1;
int count=0;
if(n.getNext() == null && nodeNumber%2 == 0) {
return n.getValue();
} else if((n.getNext()).getNext() == null && nodeNumber%2 == 0) {
return n.getValue();
} else {
nodeNumber++;
if(nodeNumber%2 == 0) {
count+=n.getValue();
return count+ sumEven(n.getNext());
} else {
return count + sumEven(n.getNext());
}
}
}
答案 0 :(得分:0)
因为如果:在第一个if语句中,n.getNext()为null但nodeNumber%2不等于0 所以你转到下一个if语句,它说n.getNext()。getNext()== null,其中第一个getNext()为空,因为它传递了前一个if语句的第一部分,但由于nodeNumber%2 == 0 part。
Ex:nodeNumber = 1,n.getNext()= null
首先if(true&& false)=>假
第二个if(ERROR)Cuz前一个if语句的第一部分为true,表示n.getNext()为null
答案 1 :(得分:0)
代码中存在许多问题。怎么重新考虑这个策略?如果要使其递归,可以假设将始终使用偶数节点调用私有方法sumEven()。然后,所有私有方法都会添加它所调用的任何内容。
以下代码未经过测试,但显示了我的意思。
public int sumEven() {
return sumEven(head,0);
}
private int sumEven(IntListNode n, int total) {
if(n==null) return total;
total += n.getValue(); // sums up running total
if(n.getNext()==null) return total;
return sumEven(n.getNext().getNext(),total); // calls next even node with current running total
}