0

このクラスを実行すると、合計/平均が得られません。以下のエラーが表示されます。なぜそれを取得しているのかわかりません。私はこれに非常に新しい学生です。

public class DebugEight2
{
   public static void main(String[] args)
    {
    int[] someNums = {4,17,22,8,35};
    int tot;
    int x;
    int sum = 0;
    for(x = 0; x <= someNums.length; ++x)
      tot = someNums[x];
      sum = sum + someNums[x];
    System.out.println("Sum is " + sum);
    System.out.println("Average is " + sum * 1.0 / someNums.length);
    }
}

エラー:

"Exception in thread "main" java.lang.ArrayIndexOutofBoundsException: 4 at DebugEight1.main (DebugEight1.java:17)"
4

6 に答える 6

0

配列インデックスは、ループ内で0それlength -1 を参照し<=てください。forだから、これfor(x = 0; x <= someNums.length; ++x)for(x = 0; x < someNums.length; ++x)

于 2013-10-18T23:34:48.847 に答える
0

問題はループ状態です。このように等号を削除してください

for(x = 0; x < someNums.length; ++x)

また、ループ内にあるはずのコードを角かっこで囲む必要があります (角括弧なしでは、for ループ条件の後の次の行のみが実行されます)。

for(x = 0; x < someNums.length; ++x) {
  tot = someNums[x];
  sum = sum + someNums[x];
}
于 2013-10-18T23:34:57.007 に答える
0

配列はゼロから始まり、そのインデックスは から0までsomeNums.length -1

配列の境界を超えているだけでなく、変数sumがループの範囲外に割り当てられています。配列の上限を調整し、中かっこを追加します。

for (x = 0; x < someNums.length; x++) {
    tot = someNums[x];
    sum = sum + someNums[x];
}

お役に立てれば

于 2013-10-18T23:35:29.347 に答える
0
  1. 配列内の最大インデックスがであるため、xがより小さい間、反復したいので、ループ内に変更しますsomeNums.length;arraysLength - 1x <= someNums.length;x < someNums.length;for
  2. tot合計した数を表す変数が既にあるため、(合計数を格納する必要があると思います)変数は必要ありませsomeNums.lengthん。ところで、あなたはすでに と をavg使っsumて計算していsomeNums.lengthます。安心して取り外せるので

    tot = someNums[x];
    

    あなたのコードから。

于 2013-10-18T23:39:52.990 に答える
0

最初にi=から削除する必要があります。 次に、ループの開始時に配置すると、状態がチェックされ、 +1xに追加されます。現在、ループが最後にサイズをインクリメントするときの配列の長さは5です。は6で、6の場所にアイテムがないため、例外がスローされているため、変更する必要があります<= someNums.length;< someNums.length;++xx++++x< someNums.length;++xx++

public class DebugEight2
{
   public static void main(String[] args)
    {
    int[] someNums = {4,17,22,8,35};
    int tot;
    int x;
    int sum = 0;
    for(x = 0; x <someNums.length; x++) /// just change here
      tot = someNums[x];
      sum = sum + someNums[x];
    System.out.println("Sum is " + sum);
    System.out.println("Average is " + sum * 1.0 / someNums.length);
    }
}
于 2013-10-18T23:50:03.263 に答える
0

あなたがしたことは、配列の範囲を超えてループしたことです。someNums.length を実行してみてください。数値 5 が得られます。

for ループに移動すると、0 から始まり、5 になるまでインクリメントされることがわかります。また、for ループは配列を横断し、配列内の位置を指しています。

それでは、ループをたどってみましょう。

x = 0 では、someNums[x] = 4 です。

x = 1 で、someNums[x] = 17、

x = 2 で、someNums[x] = 22、

x = 3 で、someNums[x] = 8、

x = 4 で、someNums[x] = 35、

ご覧のとおり、配列は終了し、トラバースする要素はもうありません。しかし、for ループは 5 になるまでインクリメントすると前に述べました。

したがって、x = 5 の場合、someNums[x] は、ある位置を指していて、その位置から本質的に存在しない情報を取得しようとしているため、エラーが発生する必要があります。

問題を解決するには、次の 2 つの方法があります。

  1. ループを次のように変更しますfor(int x = 0; x < someNums.length; x++)
  2. ループを次のように変更しますfor(int x = 0; x <= someNums.length - 1; x++)

これらはループを 5 ではなく 4 で停止するため、問題を解決します。したがって、エラーは発生しなくなります。

于 2015-09-12T13:54:55.333 に答える