为什么我的函数总是返回 false,即使它之前发现返回 true


public boolean contains(Object data)
{
    Node temp = new Node(data);
    Node current = head.getNext();
    for(int i = 0; i < size(); i++)
    {
        //System.out.println(current.getData());
        if(temp.getData() == current.getData())
        {
            System.out.println("true");
            return true;
        }
        else
        {
            current = current.getNext();
        }
    }
    return false;
}

我的代码在上面,无论如何它都会返回 false。如果它找到一个 true 条件,它会打印 "true",并且仍然返回 false。我在这里做错了什么?我有完全相同的函数,除了它返回一个整数而不是布尔值,并且它使用相同的方法/代码工作得很好.4

我的函数做同样的事情并且工作正常:

public int indexOf(Object data)
{
    Node temp = new Node(data);
    Node current = head.getNext();
    for(int i = 0; i < size(); i++)
    {
        if(temp.getData() == current.getData())
        {
            return i;
        }
        current = current.getNext();
    }
    return -1;
}

这个表达式有问题:

if(temp.getData() == current.getData())

您的数据由Object表示已经够糟糕的了 - 它实际上应该是一个参数化类型*。 但是,由于您使用的是 == ,因此您正在检查对象是否是同一实例,而不是它们是否等效。

将比较更改为改用.equals

if(temp.getData().equals(current.getData())

*:如果您想知道,您可以将Node更改为Node<T>,将链表实例更改为键入LinkedList<Node<T>>,并将contains的方法参数更改为public boolean contains(T data)

最新更新