2017-12-04 9 views
-1

という配列を変数positiveNumbersの長さで作成し、その中に正の数値を格納しようとしています。array私はこのエラーを取得しています:変数を使用した配列長宣言

ArrayIndexOutOfBoundsException: 5

int positiveNumbers=0; 

int[] array = {12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0, -999, -87}; 

for(int i = 0; i<array.length;i++) 
    if (array[i] > 0) 
     positiveNumbers++; 

int[] positiveNumbersArray = new int[positiveNumbers]; 

for(int i =0; i<array.length;i++){ 
    if (array[i] > 0) 
     positiveNumbersArray[i]=array[i]; 
} 
+2

あなたが原因を調査しようとする試みを行いましたか? 2番目のループに 'System.out.println(i);'を追加すると、あなたの質問に答えました。 – VGR

答えて

0

問題は、あなたがpositiveNumbersArray用に別のインデックスが必要なことです。最も簡単な修正は次のとおりです。

positiveNumbers = 0; 
for(int i =0; i<array.length;i++) { 
    if(array[i] > 0) 
     positiveNumbersArray[positiveNumbers++]=array[i]; 
} 

これはpositiveNumbersArrayで正しい位置に番号を挿入します。

+0

私はSystem.out.println(i)を実行しましたが、何が間違っていたか把握できませんでした。ありがとう –

0

配列 "array"のサイズは "positiveNumbersArray"より大きく、配列 "array"のインデックスを使用して配列 "positiveNumbersArray"にアクセスします。 例:「配列」のサイズは15で、正の数は6です。配列 配列「配列」の正の値のインデックスが8の場合はどうなりますか?

はそれを試してみてください。

int positiveNumbers = 0; 

    int[] array = {12, 0, -22, 0, 43, 545, -4, -55, 12, 43, 0, -999, -87}; 

    for (int i = 0; i < array.length; i++) { 
     if (array[i] > 0) 
      positiveNumbers++; 
    } 

    int[] positiveNumbersArray = new int[positiveNumbers]; 

    for (int i = 0, index = 0; i < positiveNumbersArray.length; i++, index++) { 

     while (array[index] <= 0) { 
      index++; 
     } 
     positiveNumbersArray[i] = array[index]; 
    } 
関連する問題