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

私はコードを操作して動作させましたが、新しい配列にゼロが追加されています。上部の出力は 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 に答える
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 に答える