ホームページ >Java >&#&チュートリアル >配列インデックスが範囲外の例外です

配列インデックスが範囲外の例外です

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-19 06:05:08220ブラウズ

Array index out of out-of-bounds exception

恐ろしいArrayIndexOutOfBoundsExceptionに遭遇しましたか?このガイドではその原因を説明し、実用的な解決策を提供します。 このエラーをまだ経験したことがない場合でも、それを理解しておけば、将来デバッグで悩まされることがなくなります。

ArrayIndexOutOfBoundsException は、コードが配列の有効範囲外のインデックスを使用して配列要素にアクセスしようとすると発生します。 Java (および他の多くの言語) では、配列インデックスは 0 から始まり、array.length - 1 まで拡張されます。 array.length または負のインデックスにアクセスしようとすると、この例外がトリガーされます。

ケーススタディ: Java 並べ替えプログラム

ファイルから整数を読み取り、バブル ソートを使用して整数を並べ替え、並べ替えた結果を表示するように設計された Java プログラムについて考えてみましょう。 以下に示す元のコードは、ArrayIndexOutOfBoundsException.

を生成しました。
<code class="language-java">public static void main(String[] args) {
    // ... (File input code using Scanner) ...

    int [] nums = new int [(int) name.length()]; // Problem starts here!

    // ... (File reading code) ...

    for (int i = 0; i < nums.length -1; i++) {
        for (int j = 0; j < nums.length - 1; j++) { // Potential issue here
            if(nums[i] > nums[j + 1]) {
                int temp = nums[j+1];
                nums[j+1] = nums[i];
                nums[i] = temp;
            }
        }
    }

    // ... (Output code) ...
}</code>

問題の根源

主な問題は、バブル ソート内のネストされたループにあります。 if(nums[i] > nums[j 1]) 行には問題があります。 jnums.length - 1 に達すると、j 1nums.length になり、無効なインデックスになります。

解決策: ループ境界の調整

修正には、j が使用されているときに j 1 が最後のインデックスに到達しないように内部ループの条件を変更することが含まれます。 代わりに:

<code class="language-java">for (int j = 0; j < nums.length - 1; j++)</code>

使用:

<code class="language-java">for (int j = 0; j < nums.length - 1; j++) </code>

この微妙な変更により、nums[j 1] が有効な最大値 (j) にあるときにコードが nums.length - 2 にアクセスすることが確実に回避されます。

さらなる考慮事項

  • 配列サイズ: 最初の配列宣言 int [] nums = new int [(int) name.length()]; にも潜在的に問題があります。 ファイル名の長さは、ファイル内の整数の数とは無関係です。 ファイルから読み取られた実際の整数の数に基づいて配列のサイズを動的に変更するか、ArrayList.

    のようなより柔軟なデータ構造を使用することをお勧めします。
  • エラー処理: 堅牢なコードには、ファイル入力中に try-catchFileNotFoundException などの潜在的な例外を管理するためのエラー処理 (NumberFormatException ブロックなど) が含まれています。

原因を理解し、提供された解決策を適用することで、プログラム内の ArrayIndexOutOfBoundsException エラーを効果的に防止し、解決できます。 配列のサイズ設定を慎重に検討し、堅牢で信頼性の高いコードを実現するための包括的なエラー処理を組み込むことを忘れないでください。

以上が配列インデックスが範囲外の例外ですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。