Java 创建一个新数组,其中包含目标值每次出现的索引

Java 创建一个新数组,其中包含目标值每次出现的索引,java,arrays,methods,indexing,Java,Arrays,Methods,Indexing,我试图创建一个方法,创建一个新数组,其中包含目标值每次出现的索引。我必须使用2个循环来完成这个。第一个计算目标发生的次数。然后创建新数组,以保存这么多索引。然后,第二个循环将索引放入新数组中 我已经编写了下面的代码,但它在result[I]=f[I]行抛出javalang数组越界异常:5 public class FindAll { public FindAll() { int a[] = {7, 8, 9, 9, 8, 7}; print(findAl

我试图创建一个方法,创建一个新数组,其中包含目标值每次出现的索引。我必须使用2个循环来完成这个。第一个计算目标发生的次数。然后创建新数组,以保存这么多索引。然后,第二个循环将索引放入新数组中

我已经编写了下面的代码,但它在
result[I]=f[I]行抛出
javalang数组越界异常:5

public class FindAll {

    public FindAll() {
        int a[] = {7, 8, 9, 9, 8, 7};
        print(findAll(a, 7));
        print(findAll(a, 2));
    }

    public void print(int p[]) {
        System.out.print("{");
        int i;

        for (i = 0; i < p.length - 1; ++i) {
            System.out.print(p[i] + ", ");
        }

        System.out.print(p[i]);
        System.out.print("}");
    }

    public int[] findAll(int f[], int target) {
        int count = 0;
        for (int i = 0; i < f.length; ++i) {
            if (f[i] == target) {
                count++;
            }
        }
        int result[] = new int[count];
        for (int i = 0; i < f.length; ++i) {
            if (f[i] == target) {
                result[i] = f[i];
            }
        }
        return result;
    }
}
公共类FindAll{
公共财政部(){
int a[]={7,8,9,9,8,7};
印刷品(findAll(a,7));
印刷品(芬德尔(a,2));
}
公共作废打印(整数p[]{
系统输出打印(“{”);
int i;
对于(i=0;i
试试这个

int result[] = new int[count];
int index = 0;
for (int i = 0; i < f.length; i++)
{
    if (f[i] == target){
        result[index] = f[i];
        index++;
    }
}
int result[]=新的int[count];
int指数=0;
对于(int i=0;i
将findAll函数替换为

public int[] findAll(int f[], int target) {
    int count = 0;
    for (int i = 0; i < f.length; ++i) {
        if (f[i] == target)
            count++;
    }
    if(count == 0) return null;
    int result[] = new int[count];
    for (int i = 0, curr = 0; i < f.length; ++i) {
        if (f[i] == target)
            result[curr++] = i;
            // Here you have to store the index not the value
    }

    return result;
}

它会很好用的

您正在创建的结果数组是目标出现次数的大小,而不是原始数组的大小

 public int[] findAll(int f[], int target)
    {
    int count = 0;
    for (int i = 0; i < f.length; ++i)
    {
        if (f[i] == target)
            count++;
    }
    int result[] = new int[count]; // This is the size of number of occurrences of target
    for (int i = 0; i < f.length; ++i) // 'i' will go up to size of original array
    {
        if (f[i] == target)
            result[i] = f[i]; // You are trying to put the element of the original array in to the same index of your result!?
    }

    return result;
}
public int[]findAll(int f[],int target)
{
整数计数=0;
对于(int i=0;i
相反,您需要为每个目标元素添加索引:

int resultIndex = 0;
for (int i = 0; i < f.length; i++) {
    if ( f[i] == target ) {
        result[n] = i;
        n++;
    }
}
int resultIndex=0;
对于(int i=0;i
您是否使用调试器执行了代码?你肯定会发现为什么会这样。
int resultIndex = 0;
for (int i = 0; i < f.length; i++) {
    if ( f[i] == target ) {
        result[n] = i;
        n++;
    }
}