2

我有一个非常令人沮丧的问题:

我正在尝试运行一个迭代器,但它在 hasNext 类中不断出现 java.lang.NullPointerException。

我不太确定它可能在哪里尝试使用空值。我假设这与电流有关。我添加了一个 if 语句来检查 current 是否为空。但随后它返回和意想不到的价值。

帮助表示赞赏。

下面的代码:

private class Iterator implements Iterator
{
    private Link<T> current;

    public boolean hasNext () { 
        if(current.next == null)
            return false;
        return true;
    }

    public T next() throws OutOfBounds
    {
        if (this.hasNext())
        {
            T element = current.element;
            current = current.next;
            return element;
        }
        else 
            throw new OutOfBounds("No next element to call");
    }
}

private class Link<T> 
{
    private T       element;
    private int     priority;
    private Link<T> next;

    public Link(T t, int p, Link<T> n) 
    {
        this.element = t;
        this.priority = p;
        this.next = n;
    }
}

}

4

3 回答 3

5

您可能没有初始化current,因此您在方法中的检查hasNext应该在检查之前进行null比较currnetcurrent.next

修改您的支票

if(current.next == null)

至:

if(current == null || current.next == null)

或将您的方法修改为:

public boolean hasNext () { 
   return (current != null && current.next != null);
}
于 2013-05-17T07:14:25.847 回答
1

尝试如下更新您的 hasNext 以查找问题:

public boolean hasNext () { 
        if(current == null) {
           System.out.println("current is null");
           return false;
        } else if(current.next == null)
            return false;
        }
        return true;
    }
于 2013-05-17T07:20:33.560 回答
1

您可以在 while 块内使用 iterator.next() 两次。使用 iterator.next() 创建新对象,然后使用它。

这是正确的使用方法

ArrayList<String> demo = new ArrayList<>();

demo.add("A");
demo.add("B");
demo.add("C");
demo.add("D");

System.out.println(demo);

//Get iterator
Iterator<String> iterator = demo.iterator();

//Iterate over all elements
while(iterator.hasNext()){
/* if you want to use the elemet two times then put in a varialbe and use it.*/
    //Get current element
    String value = iterator.next();
     System.out.println("fist time using"+ value)
    System.out.println( "second time using " + value );

}
于 2019-09-18T08:53:50.287 回答