0

次の簡単な Java ステートメントがあります。

public static void main(String[] args) 
{
    int[] grades = {102, 105, 98, 105};

    Sorts.selectionSort(grades);

    for (int grade : grades) {
   // {
        System.out.println(grade);
        try {
            System.out.print(grades[grade] + "     ");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Error!");
        }
    }

そして、私は次の出力を得ています:

102
Error!
105
Error!
98
Error!
105
Error!

配列にない値に対してループが繰り返されるのはなぜですか? 私はかなり混乱しています。

ありがとうございました。

4

4 に答える 4

1

int gradeインデックスではなく、配列内の各要素の値です。

の各要素を取得したい場合は、次のようなint[] grades = {102, 105, 98, 105};通常のforループを使用する必要があります。

for (int i = 0; i < grades.length; i++) {
  System.out.println(grades[i]);
}

配列内の各要素のインデックスは 0 から 3 の範囲であるため、これは機能します。

強化されたfor loopドキュメントをご覧ください。

于 2013-03-31T01:24:13.643 に答える
1

「グレード」変数はすでにインデックスではなく配列内の値であるため、範囲外のエラーをスローしています。

したがって、最初の System.out.println() で正常に出力されますが、try/catch 内でこれを実行しようとしています。

グレード[102]

そして、配列にはそのインデックスがありません。最大インデックスは 3 (-> 105) です。

于 2013-03-31T01:26:29.573 に答える
0

foreach ループは、インデックスではなく、配列の値を反復処理します。

したがって、gradeです1024 項目配列の 103番目(0 ベース) の要素に
アクセスしようとしています。 それはうまくいかない

于 2013-03-31T01:24:09.203 に答える