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时,我就这样做了,这是我试图在测试的第三个断言中返回的,我在这里缺少什么?
答案 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。