我应该在此练习中使用单链接列表和具有通用类型的某个元素。返回该元素出现的每个位置的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[]
。