【问题标题】:IndexOf method JavaIndexOf 方法 Java
【发布时间】:2020-06-01 17:13:15
【问题描述】:

我的方法indexOf 应该返回列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回-1。更正式地说:返回最低索引 i 使得 (E == null ? get(i) == null : E.equals(get(i))),如果没有这样的索引,则返回 -1。这段代码的问题是它似乎总是返回-1,有什么建议可以解决这个问题吗?

 public int indexOf(E element) {

    Node current = head;
    int index = 0;
    for (int i = 0; i < size; i++) {
        if (current.getmElement() == element) {
            return index;
        }
        index++;
        current = current.getmNextNode();
    }
    return -1;
}

我正在使用泛型来查找列表中的下一个元素:

public class Node<E> {
private E mElement;
private Node<E> mNextNode;

Node(E data) {

    this.setmElement(data);
}
public E getmElement() {
    return this.mElement;
}
public void setmElement(E element) {
    this.mElement = element;
}
public Node<E> getmNextNode()
{
    return this.mNextNode;
}
public void setmNextNode(Node<E> node)
{
    this.mNextNode = node;
}}

【问题讨论】:

  • 使用等于而不是 ==
  • head 字段在代码中不可解析。
  • E.equals(get(i)),如文中所述,与E == get(i)不同(注:不需要index,应始终与i相同,或者更好的IMO,不需要对于i,循环直到当前为null(假设这意味着列表结束))

标签: java list generics collections equals


【解决方案1】:

您正在进行参考检查:current.getmElement() == element。你的意思是检查这些对象是否相等:

current.getmElement().equals(element)

【讨论】:

  • 谢谢,但是如果我编辑我的 == 以等于并删除索引并只使用 i,我会遇到 current= current.getmNextNode(); 的问题反而。你知道怎么解决吗?
  • 有什么问题?
  • 它说这是一个无法访问的语句。
  • 表示代码无法执行。很难用提供的代码来判断。你能用更多代码提出另一个问题吗?如果此答案有帮助,请考虑将其标记为正确。
  • 是的,我提出了另一个问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
相关资源
最近更新 更多