Java 如何正确抛出nullPointerException?
我需要编写一个方法Java 如何正确抛出nullPointerException?,java,linked-list,Java,Linked List,我需要编写一个方法delete(),该方法接受int参数k并删除链表中的第k个元素(如果存在)。我还想观察列表是否为空,或者k是否超出范围。如果其中任何一个为真,我想抛出一个NullPointerException。到目前为止,我的代码如下 public void delete(int k){ Node current = head; for (int i = 0; i < k; i++){ if(head == null &&a
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;
}
但是,如果我删除抛出新的NullPointerException()代码>行,当我使用一个我知道将为null的值执行代码时,仍然会收到相同的错误消息
我的问题是,我是否实现了抛出新的NullPointerException()的throw代码>命令正确,如果不正确,我如何修复它的实现?首先,您通常不会抛出一个NullPointerException
这是在引用null
值时引发的未经检查的异常,该值表示编码错误,而不是可恢复的条件
其次,当您没有在代码中显式地抛出异常,但仍然看到它被抛出时,您的current
值很可能是null
,因此current。next
将抛出它
您可以尝试抛出许多显式异常:
IndexOutOfBoundsException
NoTouchElementException
IllegalStateException
- 等等,或您自己的自定义例外
您确定curren't不为null并在访问current时抛出。下一步
?我在if语句中检查head是否为null,因为current等于head,我认为如果head为null,那么current将因此为null。至少,这是我的逻辑。在代码中抛出NullPointerException只是让人困惑,因为您的代码中确实抛出了NPE。如果出现错误,请使用IllegalStateException或IllegalArgumentException。@OmarN它应该是|
而不是&&
@OmarN始终信任您的编译器,直到证明它出错;-)@biziclop:没有什么可以阻止它。如果head==null,那么current==null,因此NPE@biziclop我们可以在这里删除这些评论吗?
Exception in thread "main"
java.lang.NullPointerException
at hw4.LinkedList.delete(LinkedList.java:168)
at hw4.LLTest1.main(LLTest1.java:23)