为什么在迭代器中出现空指针异常?

奥马尔·N

通过双向链表调用迭代器时,出现了空指针异常。空指针异常发生在main行中assertEquals(i, (int) it.next());

     /***************************
      * nested class DequeIterator
      ***************************/
     private class DequeIterator implements Iterator<E>
      {
        // instance data member of ListIterator
        private Node current;

        // constructors for ListIterator
        public DequeIterator()
        {
          current = first; // head in the enclosing list
        }

        public boolean hasNext()
        {
          return current != null;
        }

        public E next()
        {
          if (hasNext() == false){ throw new NoSuchElementException();}
          else {
          E ret = current.item;
          current = current.next;
          return ret;
          }
        }

public void addLast(E item) {

        if (item.equals(null)) { throw new NullPointerException(); }

        else {

        Node node = new Node(item, null);
        Node ptr = last;

        ptr.prev.next = node;
        node.next = ptr;
        node.prev = ptr.prev;
        ptr.prev = node;    
        N++;

        }
    }

public static void main(String[] args) {

        Deque<Integer> lst = new Deque<Integer>(); // empty list


        for(int i = 1; i <= 5; i++) {
              lst.addLast(i);
            }
        assertEquals(5, lst.size());
        Iterator<Integer> it = lst.iterator();
        int i = 1;
        while(it.hasNext()) {
          assertEquals(i, (int) it.next());
          i++;
        }
        assertEquals(6, i);
        assertEquals(5, lst.size());
}

谁能告诉我为什么我此时会得到一个空指针异常?

谐振

通过查看循环的终止条件开始:

public boolean hasNext(){
    return current != null;
}

这意味着它最后一次运行时将返回null,因为它仅检查当前元素而不是下一个元素是否为空。

因此,您的代码将如下所示:

Integer it_next = null;
assertEquals(i, (int)it_next);

而这int就是引发异常的原因。如果查看拆箱的工作规则,则可以找出原因:

如果r是Integer类型的引用,则取消装箱转换会将r转换为r.intValue()

所以你的代码变得类似于

((Integer)null).intValue();

这是对null值的方法调用,从而导致异常。

据推测,你想这样做的解决方法是不返回truehasNext,如果nextnull像这样:

public boolean hasNext(){
    return current != null && current.next != null;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

避免在委托中出现空指针异常

来自分类Dev

为什么会出现此空指针异常?

来自分类Dev

Apache POI:为什么在单元格为空时不会发生的 if 语句中出现 Cell.getCellType() 的空指针异常?

来自分类Dev

为什么会出现空指针异常,应该使用反射吗?

来自分类Dev

尝试在评分栏中将值设置为“ rating”时,为什么会出现空指针异常?

来自分类Dev

在FreeRTOS中出队时,为什么会得到空指针?

来自分类Dev

为什么我的构造函数中出现StackOverflowError异常

来自分类Dev

为什么在jooq的Firebird中出现列未知异常?

来自分类Dev

为什么在自己的and函数实现中出现异常?

来自分类Dev

为什么在线程错误中出现异常?

来自分类Dev

为什么在此代码中出现“找不到行”异常?

来自分类Dev

为什么在此函数中出现超出范围的异常?

来自分类Dev

为什么在jooq的Firebird中出现列未知异常?

来自分类Dev

为什么我会收到内部服务器的空指针异常?

来自分类Dev

为什么在使用useDelimiter时数组中出现空元素

来自分类Dev

为什么在字符串输出中出现空值?

来自分类Dev

为什么在if分支中出现“可能为空”错误?

来自分类Dev

为什么在R中出现“错误:`...不为空”?

来自分类Dev

为什么在此活动中出现空对象错误?

来自分类Dev

为什么自定义比较器时出现有关空指针的错误

来自分类Dev

如何避免两次活动通信中出现空指针异常

来自分类Dev

在MySQL数据库写入过程中出现空指针异常

来自分类Dev

每当尝试压入堆栈时都会在 java 空指针异常中出现错误

来自分类Dev

集成Helpshift API时在Android studio中出现错误(空指针异常)

来自分类Dev

为什么在另一个类中使用PrintWriter时会出现PrintWriter空指针异常

来自分类Dev

空指针运行时异常erorr,但为什么呢?

来自分类Dev

为什么我的程序因空指针异常而失败

来自分类Dev

空指针异常,不知道为什么?

来自分类Dev

为什么我会得到空指针异常?

Related 相关文章

  1. 1

    避免在委托中出现空指针异常

  2. 2

    为什么会出现此空指针异常?

  3. 3

    Apache POI:为什么在单元格为空时不会发生的 if 语句中出现 Cell.getCellType() 的空指针异常?

  4. 4

    为什么会出现空指针异常,应该使用反射吗?

  5. 5

    尝试在评分栏中将值设置为“ rating”时,为什么会出现空指针异常?

  6. 6

    在FreeRTOS中出队时,为什么会得到空指针?

  7. 7

    为什么我的构造函数中出现StackOverflowError异常

  8. 8

    为什么在jooq的Firebird中出现列未知异常?

  9. 9

    为什么在自己的and函数实现中出现异常?

  10. 10

    为什么在线程错误中出现异常?

  11. 11

    为什么在此代码中出现“找不到行”异常?

  12. 12

    为什么在此函数中出现超出范围的异常?

  13. 13

    为什么在jooq的Firebird中出现列未知异常?

  14. 14

    为什么我会收到内部服务器的空指针异常?

  15. 15

    为什么在使用useDelimiter时数组中出现空元素

  16. 16

    为什么在字符串输出中出现空值?

  17. 17

    为什么在if分支中出现“可能为空”错误?

  18. 18

    为什么在R中出现“错误:`...不为空”?

  19. 19

    为什么在此活动中出现空对象错误?

  20. 20

    为什么自定义比较器时出现有关空指针的错误

  21. 21

    如何避免两次活动通信中出现空指针异常

  22. 22

    在MySQL数据库写入过程中出现空指针异常

  23. 23

    每当尝试压入堆栈时都会在 java 空指针异常中出现错误

  24. 24

    集成Helpshift API时在Android studio中出现错误(空指针异常)

  25. 25

    为什么在另一个类中使用PrintWriter时会出现PrintWriter空指针异常

  26. 26

    空指针运行时异常erorr,但为什么呢?

  27. 27

    为什么我的程序因空指针异常而失败

  28. 28

    空指针异常,不知道为什么?

  29. 29

    为什么我会得到空指针异常?

热门标签

归档