1

我正在解决一个问题,并且很难让它输出正确的信息。

我要做的是找到目标值的每一次出现并将其放入一个新数组中并输出目标值的索引。如果没有找到目标值,则返回一个空数组。 outputs {}

现在我收到一个错误。

findAll(): 
[I@349b688e
[I@46ed5d9d
java.lang.ArrayIndexOutOfBoundsException

输出应该是:

outputs {0, 5}

outputs {}

public class FindIndex(){
public FindIndex() {
int a[] = {7, 8, 9, 9, 8, 7};

System.out.println("findAll(): ");
System.out.println(findAll(a, 7));
System.out.print(findAll(a, 2));
}

public int[] findAll(int a[], int num) {

    int indexNum = 0;
    int arrSize = 0;


    // find all occurrence of the target number
    for(int i = 0; i < a.length; i++) {
        if(a[i] == num) {
            arrSize++;
        }
    }

    // create new array 
    int newArray[] = new int[arrSize];
    for(int i = 0; i < a.length; i++) {
        if(a[i] == num) {
            newArray[indexNum] = i;

        }
    }
    return newArray;
}

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

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

    if(a.length > 0) {
        System.out.print(a[i]);
    }
    System.out.print("}\n");

}
}
4

4 回答 4

0

您永远不会递增indexNum,它始终保持在0并且数组继续在同一索引处写入值。

我认为你应该在那里有这个表达:

newArray[indexNum++] = i;
于 2013-03-13T20:06:20.370 回答
0

对于您的打印问题,您实际打印的是返回的数组的地址,而不是内容。

您可以执行以下操作:

    System.out.println(Arrays.toString(findAll(a, 7)));
    System.out.print(Arrays.toString(findAll(a, 2)));

这将为您提供以下输出:

[5, 0]
[]
于 2013-03-13T20:07:21.367 回答
0

调用findAll(a, 2)的大小为零newArray,这就是你得到ArrayIndexOutOfBoundsException.

您应该if (arrSize > 0)在使用索引进行数组之前检查并访问它。

于 2013-03-13T20:13:24.963 回答
0

我正在使用代码并让它工作,但它给我在新数组中添加了零。顶部的输出应该是 0、5 我如何摆脱这些添加的零?

int a[] = {7, 8, 9, 9, 8, 7}; 
int array2[];

// print the occurrence of a target index value 
    System.out.println("findAll(): ");
    array2 = copy(findAll(a, 7));
    array2 = copy(findAll(a, 2));

public int[] findAll(int a[], int target) {

    int index;
    int found = 0;

   // find all occurrence of the target number
    for(int i = 0; i < a.length; i++) {
        if(a[i] == target) {
            found = target;
            i++;
        } 
    } 

    // create new array 
    int newArray[] = new int[found];
    for(int i = 0; i < newArray.length; i++) {
        if(a[i] == target) {
            newArray[i] = i;
            i++;
        }
    }
   return newArray;
} 

public int[] copy(int newArray[]) {
    System.out.print("{");
    int i;

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

    }


    System.out.print("}\n");
    return newArray;
 }


output:

findAll(): 
{0, 0, 0, 0, 0, 5, }
{}
于 2013-03-16T20:38:35.087 回答