indexOf null异常

时间:2014-03-20 03:25:47

标签: java arrays list hyperlink

public int indexOf(X item)
{
    Node <X> current = head;
    int c = 0;
    if (current.getValue().equals(item))
    {
        return c;
    }
    while (current != null)
    {
        current = current.getLink();
        c++;
        if (current.getValue().equals(item))
        {
            return c;
        }
    }
    return -1;
}

@Test
public void testIndexOf()
{
    LList<String> b = new LList<String>();

    for (int i = 0; i < 20; i++)
        b.add("str" + i);

    assertEquals(19, b.indexOf("str0"));
    assertEquals(0, b.indexOf("str19"));
    assertEquals(-1, b.indexOf("not found"));
}

由于某种原因,最后一个断言是将Nullpointer异常引发错误。但是当它确实达到null以返回-1时,我就这样做了,这是我试图在测试的第三个断言中返回的,我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

问题在于:

while (current != null)
{
    current = current.getLink();

您确保current不是null。 。 。但随后您立即更改current,使其再次成为null。只要链接列表中没有item,您就会达到这种情况。

您可以通过重新排列代码来解决此问题:

public int indexOf(X item)
{
    Node <X> current = head;
    int c = 0;
    while (current != null)
    {
        if (current.getValue().equals(item))
        {
            return c;
        }
        current = current.getLink();
        c++;
    }
    return -1;
}

答案 1 :(得分:0)

while (current != null)
{
    current = current.getLink();
    c++;
    if (current.getValue().equals(item))
    {
        return c;
    }
}
return -1;

您在空检查后前进到下一个链接。 current.getLink返回null。