2016-10-23 12 views
-4

私は学校のための仕事があります、私はint型番号を使用して配列を作る必要があります。 私は既にすべての値を割り当てました。私はそれを実行しようとした場合 は、それがそこにあることを示している - スレッドの例外「メイン」java.lang.ArrayIndexOutOfBoundsException:20スレッド "main"の例外java.lang.ArrayIndexOutOfBoundsException:20

if (K==0) { 
     Random r = new Random(); 
     for (i = 0; i < 20; i++) 
      A[i] = r.nextInt() * 100 - 50; 
    } 
    else { 
     for (i=0; i < 20; i++) { // It shows that problem is somewhere in 
      A[i] = A[i + 1] + K; // these 2 lines. 
     } 
     System.out.println("A:"); 
     for (i = 0; i < 20; i++) 
+0

を行います私はどのくらいの大きさの配列を見ることはできませんが、配列は20です(最大インデックスは19です)。したがって、 最後の反復でオーバーフローが発生する(i = 19の場合はA [19 + 1]を呼び出す) – beatrice

+0

@reijatsuコードが不完全なので、私たちはあなたを助けることができません – Ivan

答えて

1

あなたはそれが存在しないにもかかわらずA[20]にアクセスしようとしたことを意味します

iが19に等しい場合、次の行が問題になる:あなたのループで20の

A[i] = A[i + 1] + K; 

使用19 INSEADと、それは問題ないはずです。値は変わらないので、あなたはA [19]と何をするべきかを決める必要があります。

+0

int A [] =新しいint [20]; int K、i; int C; スキャナsc =新しいスキャナ(System.in); – reijatsu

+0

私が言ったように、私はすでに配列を割り当てて作成しました。 – reijatsu

+1

@ reijatsu:はい。有効なインデックスが '0'から '19'までの配列を作成しました。上の例は、あなたが 'A [20]'を使用しようとしていることを指摘しています。これは範囲外です。 –

-2

行のA [20]にアクセスしようとしています。

A[i] = A[i + i] + K; 

これが理由で例外が発生します。

+0

「i」の値が19になると、A [i + 1]はA [20]になります。しかし、A [0]からA [19]のみが存在する。 –

-1
for (i=0; i < 20; i++) { // It shows that problem is somewhere in 
     A[i] = A[i + 1] + K; // these 2 lines. 

i = 19のときのi + 1の結果はどうなりますか?

ループ内の現行索引の後ろにアクセスする場合は、ループの反復回数をアクセス・オフセット(1の場合)だけ減らす必要があります。

0

エラーは、存在しないインデックスにアクセスしようとしていることを意味します。 配列はA [0] ... [1] ... [lastIndex]です。 しかし、存在しないインデックスにアクセスしようとしています。

A [0] ... [1] ... [lastIndex]。 [anIndexThatDoesntExist]

あなたは[20]。。すなわちA.の(最後の)インデックスに新しい値を割り当てる場合その後、 A [i]は= A [i]が+ K

関連する問題