我正在尝试从数组中提取特定的索引值,并将它们放入一个新数组中。主要数组值如下:
int a[] = {7, 8, 9, 9, 8, 7};
我对该方法的调用如下:
print(findAll (a,7));
print(findAll (a,2));
我使用的方法如下:
public int[] findAll(int a[], int target)
{
int count = 0;
int i = 0;
int index = 0;
int spotIndex = 0;
for (i = 0; i < a.length; i++)
{
if (a[i] == target)
count = count + 1;
spotIndex = i;
}
int result[] = new int[count];
for (index = 0; index < count; index++)
{
result[index] = spotIndex;
index++;
}
return result;
}
结果应该是:
{0,5} {}
我的结果如下;如果我改变目标参数,我会得到相同的结果。
{5,0} {}
提前致谢....
答案 0 :(得分:1)
小建议:
for (index = 0; index < count; index++)
{
result[index] = spotIndex;
index++;
}
你将++调用的索引加倍。在方法范围中使用索引是不好的做法,更好的是:
for (int index = 0; index < count; index++)
{
result[index] = spotIndex;
}
请注意,您将spotIndex(相同的值)放在所有结果元素中。
为什么不使用List?
public Integer[] findAll(int a[], int target) {
List<Integer> result = new ArrayList<Integer>();
for (int i=0; i<a.length; i++) {
if (a[i] == target) {
result.add(i);
}
}
return result.toArray(new Integer[result.size()]);
}
答案 1 :(得分:0)
spotIndex
无法达到您认为需要的目的。
for (i = 0; i < a.length; i++)
{
if (a[i] == target)
count = count + 1;
spotIndex = i; // spotIndex comes in for loop but not in if condition.
// and this gets modified at every step in loop.
// simply assigning value of i to it.
}
相反,逻辑应该是 -
for (i = 0; i < a.length; i++)
{
if (a[i] == target)
count = count + 1;
}
count
给出target
重复的次数。现在,创建一个大小为count
的数组,以将这些元素的索引实际复制到数组中。
int result[] = new int[count];
int copyIndex = 0;
for (index = 0; index < a.length; index++)
{
if( a[index] == target )
{
result[copyIndex] = index ;
++copyIndex;
if( copyIndex == count )
return result ;
}
}
我没有看到在第一个循环中使用此语句 - spotIndex = i;
。
注意:逻辑假设搜索元素(即target
)肯定存在于数组中。稍微修改一下,如果元素只存在,我们可以返回索引。