我有这样一个练习,在这个练习中,我应该用一个Singly Linked List和一个通用类型的特定元素,返回该元素出现的每个位置的int数组。返回该元素出现的每个位置的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;
}
first是第一个节点,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[]
.