【问题标题】:Why does my function always returns false, even if it finds return true before?为什么我的函数总是返回false,即使它之前发现return true?
【发布时间】:2015-01-04 22:45:19
【问题描述】:
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。如果它找到一个真条件,它会打印“真”,它仍然返回假。我在这里做错了什么?我有完全相同的功能,除了它返回一个整数而不是布尔值,并且它在相同的方法/代码下工作得非常好。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;
}

【问题讨论】:

  • 您将不得不添加更多上下文。我们不能只是猜测。提供一个完全可重现的例子。
  • @SotiriosDelimanolis 我所做的只是if(LL.contains("something") == true) //print
  • 如何比较 Java 中的字符串?我怀疑打印"true"
  • LL 是一个包含 3 个节点的对象(单链表),代码太大,无法添加(200+ 行)
  • @SotiriosDelimanolis 我有完全相同的代码,除了在另一种方法中使用 Integer 而不是 Boolean 并且它返回正确的值。我也会附上那个方法。

标签: java return


【解决方案1】:

这个表达式有问题:

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

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

将您的比较改为使用.equals

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

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

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多