我在双链表中查找节点的方法不能正常工作,我不知道为什么?

时间:2011-12-14 15:54:00

标签: java

这是代码

public void findDNode(String name)
{
    DNode u = header;
    while(u != null)
    {

        if(name == u.getElement())
        {
            System.out.println(u.getElement());
            break;
        }
        else if (u == null)
        {
            System.out.println("Error: not found");
            break;
        }

        u = u.nextNode();
    }

}

由于某种原因,当我寻找的节点不存在时,它不会打印错误:找不到消息。

编辑:Nevermind刚刚实现当u == null时,while循环不会发生

3 个答案:

答案 0 :(得分:4)

您应该使用equals()来比较Java字符串:

if (name.equals(u.getElement()))
{
  ...

使用==运算符比较字符串会比较引用,这在大多数情况下都不是正确的。

此外,“未找到”逻辑错位。它应该放在循环之外(具有适当的if条件)。

答案 1 :(得分:2)

你永远不会在循环中变为空!循环后执行检查。

public void findDNode(String name)
{
    DNode u = header;
    while(u != null)
    {

        if(name == u.getElement())
        {
            System.out.println(u.getElement());
            break;
        }

        u = u.nextNode();
    }
   if (u==null)
       System.out.println("Error: not found");

}

编辑:是的,你应该使用equals()

答案 2 :(得分:0)

除了使用equals()代替==来比较字符串之外,还有另一个问题。

如何在if (u == null)循环中拥有while(u != null)。那个if (u == null)块永远不会执行,因为while循环将在u == null时结束。这就是错误:未找到从未打印的原因。