我应该在此练习中使用单链接列表和具有通用类型的某个元素。返回该元素出现的每个位置的int数组。
我的代码如下所示:

  public int[] ocurrences(T elem)
  {
    Node<T> cur = first;
    int[] ocurrence = new int[size];
    for(int i = 0; i < size -1; i++)
    {
      cur = cur.getNext();
      T element = cur.getValue();
      if(element.equals(elem))
      {
        ocurrence[i] = i;
      }
    }
    return ocurrence;
  }


首先是第一个节点。 size是列表的大小。

我的代码的问题在于,对于列表示例{3,2,3},结果应为[0,2]。
我的代码打印了数组的引用,当我逐个元素打印它时,它打印的是[0,0,2]。

谢谢您的帮助!

最佳答案

您需要为ocurrence[]使用单独的计数器,例如在下面给出的代码中,我为其使用了计数器变量c

public int[] ocurrences(T elem) {
    Node<T> cur = first;
    int[] ocurrence = new int[size];
    int c = 0;
    for (int i = 0; i < size - 1; i++) {
        cur = cur.getNext();
        T element = cur.getValue();
        if (element.equals(elem)) {
            ocurrence[c++] = i;
        }
    }
    ocurrence = Arrays.copyOf(ocurrence, c);
    return ocurrence;
}


循环结束后,只需保留用c索引的元素。为此,我在函数返回ocurrence = Arrays.copyOf(ocurrence, c)之前使用了ocurrence[]

10-06 01:02
查看更多