Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确抛出nullPointerException?_Java_Linked List - Fatal编程技术网

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)