我需要编写一个方法delete()
,它接受一个int参数k并删除链表中的第k个元素(如果存在)。我也想看看列表是空的,还是k超出界限。如果其中任何一个都是真的,我想抛出一个NullPointerException
。我到目前为止的代码如下。
public void delete(int k){
Node current = head;
for (int i = 0; i < k; i++){
if(head == null && current.next == null){
throw new NullPointerException();
}
else
{
current = current.next; // Move pointer to k position
}
}
remove(current.item);
--N;
}
当我用一个我知道将为null的值执行它时,我得到以下输出:
Exception in thread "main"
java.lang.NullPointerException
at hw4.LinkedList.delete(LinkedList.java:168)
at hw4.LLTest1.main(LLTest1.java:23)
但是,如果我从代码中删除throw new NullPointerException();
行,在执行代码时仍然会得到相同的错误消息,其中我知道该值将为null。
我的问题是,我是否正确实施了throw new NullPointerException();
命令,如果没有,我该如何修复它的实现呢?
答案 0 :(得分:11)
首先,您通常不会抛出一个NullPointerException
。
这是引用null
值时抛出的未经检查的异常,表示编码错误而不是可恢复条件。
其次,如果您没有明确地在代码中抛出异常,但仍然看到它被抛出,那么current
的值可能是null
,因此current.next
会抛出它。
你可以尝试一些明确的例外来抛出:
IndexOutOfBoundsException
NoSuchElementException
IllegalStateException