Java “If”表示NullPointerException

Java “If”表示NullPointerException,java,debugging,Java,Debugging,我正在编写一个程序,它使用双链接列表实现执行一些操作。 有一件事我不明白,这让我很困惑 嗯。所以我有两个双链表。我需要创建一个方法,其中参数是第一个双链接列表的索引,我需要在该索引上放置第二个列表 我写了这个方法: public void PutInPlace(int i){ DoublyLinkedList ldw3 = new DoublyLinkedList(); // New doublylinked list. Node current = ld

我正在编写一个程序,它使用双链接列表实现执行一些操作。 有一件事我不明白,这让我很困惑

嗯。所以我有两个双链表。我需要创建一个方法,其中参数是第一个双链接列表的索引,我需要在该索引上放置第二个列表

我写了这个方法:

    public void PutInPlace(int i){
        DoublyLinkedList ldw3 = new DoublyLinkedList(); // New doublylinked list.
        Node current = ldw1.tail; // ldw1 - First doublylinked list, created earlier.
        Node current1 = ldw2.tail;  //ldw2 - Second doublylinked list, created earlier.
        int counter = 0;

        while(true){
           ldw3.AddHead(current.number);
           current = current.prev;
           counter++;
           if(counter == i){  // THAT if makes NullPointerException

            ldw3.AddHead(current1.liczba);
            current1 = current1.prev;
            if(current1 == null)
                break;

        }
     }
我不想把所有的代码,因为它很长,不容易阅读。那么,为什么ifcounter==i会产生NullPointerException呢?如果程序不起作用的话。问题在哪里


谢谢你们的帮助,伙计们

current1可能为空。但你正在努力获得价值

if(current1 != null)
{
   ldw3.AddHead(current1.liczba);
   current1 = current1.prev;
}
而不是

current1 = current1.prev;
ldw3.AddHead(current1.liczba);
current1 = current1.prev;
if(current1 == null)
   break;

把这句话改成这样,

if(current1 == null)
   break;
ldw3.AddHead(current1.liczba);
current1 = current1.prev;
而不是

current1 = current1.prev;
ldw3.AddHead(current1.liczba);
current1 = current1.prev;
if(current1 == null)
   break;

我认为当前变量是空的。i变量有一个唯一的值,比如说3

Whiletrue是一个无限循环,您的条件计数器==i将只执行一次,因为您总是递增计数器,并且它只会命中值3一次。因此,除非current1没有previous,否则中断将永远不会是它,并且您将到达current没有previous的点,使其为null,并在执行current.prev时给出异常

一个好的做法是,在使用对象的方法或属性之前,始终检查对象是否为null。

否,即if不能生成NullPointerException

首先,确保重新编译所有内容,并运行测试。然后发布该测试的输出,包括异常的堆栈跟踪

第二,逐字逐句地发布源代码,使行号清晰


第三,发布PutInPlace方法的javap输出

这还不清楚。在哪一行抛出NPX?你确定参数类型是int而不是Integer吗?也许是,但这一行与分解的if语句有什么关系?问题不在if语句中。在上面一行。