Java indexOf null异常 public int indexOf(X项) { 节点电流=头; int c=0; if(current.getValue().equals(item)) { 返回c; } while(当前!=null) { current=current.getLink(); C++; if(current.getValue().equals(item)) { 返回c; } } 返回-1; }
Java indexOf null异常 public int indexOf(X项) { 节点电流=头; int c=0; if(current.getValue().equals(item)) { 返回c; } while(当前!=null) { current=current.getLink(); C++; if(current.getValue().equals(item)) { 返回c; } } 返回-1; },java,arrays,list,hyperlink,Java,Arrays,List,Hyperlink,@测试 公共无效测试索引 { LList b=新的LList(); 对于(int i=0;i
@测试
公共无效测试索引
{
LList b=新的LList();
对于(int i=0;i<20;i++)
b、 加上(“str”+i);
资产质量(19,b.indexOf(“str0”);
资产质量(0,b.indexOf(“str19”);
资产质量(-1,b.indexOf(“未找到”);
}
出于某种原因,最后一个断言将错误作为Nullpointer异常。但是当它返回-1时达到null时,我就这样做了,这是我在测试的第三个断言中试图返回的,我在这里遗漏了什么?问题是:
@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"));
}
确保当前
不是空
。但是,您可以立即更改当前的current
,使其再次成为null
。只要链接列表中没有项
,您就会遇到这种情况
您可以通过稍微重新排列代码来解决此问题:
while (current != null)
{
current = current.getLink();
public int indexOf(X项)
{
节点电流=头;
int c=0;
while(当前!=null)
{
if(current.getValue().equals(item))
{
返回c;
}
current=current.getLink();
C++;
}
返回-1;
}
空检查后,您将前进到下一个链接
current.getLink
返回空值。是的,这是有效的,但这与我写的有什么不同,我仍然不理解。我在当前不为空时移动到下一个链接,如果该链接不为空,请执行相同操作,直到到达项目。或者抛出-1,如果它不在那里,则测试current
是否非空;然后,将current
设置为current.getLink()
,该值可能为空;然后,尝试调用current.getValue()
——但如果current
为空,则无法执行此操作。这有意义吗?你看过例外中的行号了吗?您发现堆栈跟踪的哪一部分令人困惑(假设您困惑了,否则您不会在这里发布)?
while (current != null)
{
current = current.getLink();
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;
}
while (current != null)
{
current = current.getLink();
c++;
if (current.getValue().equals(item))
{
return c;
}
}
return -1;