Maison >Java >javaDidacticiel >Index de tableau hors exception hors limites

Index de tableau hors exception hors limites

Linda Hamilton
Linda Hamiltonoriginal
2025-01-19 06:05:08220parcourir

Array index out of out-of-bounds exception

Rencontrer le redoutable ArrayIndexOutOfBoundsException ? Ce guide explique sa cause et propose une solution pratique. Même si vous n'avez pas encore rencontré cette erreur, la comprendre vous évitera des problèmes de débogage sur toute la ligne.

Le ArrayIndexOutOfBoundsException se produit lorsque votre code tente d'accéder à un élément du tableau à l'aide d'un index situé en dehors de la plage valide du tableau. En Java (et dans de nombreux autres langages), les indices de tableau commencent à 0 et s'étendent jusqu'à array.length - 1. Essayer d'accéder à array.length ou à un index négatif déclenchera cette exception.

Étude de cas : un programme de tri Java

Considérons un programme Java conçu pour lire des entiers à partir d'un fichier, les trier à l'aide du tri à bulles et afficher les résultats triés. Le code original, illustré ci-dessous, a produit un 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>

La racine du problème

Le principal problème réside dans la boucle imbriquée dans le tri à bulles. La ligne if(nums[i] > nums[j 1]) pose problème. Lorsque j atteint nums.length - 1, j 1 devient nums.length, un index invalide.

La solution : ajuster les limites des boucles

Le correctif implique de modifier la condition de la boucle interne pour empêcher j d'atteindre le dernier index lorsque j 1 est utilisé. Au lieu de :

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

Utilisation :

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

Ce changement subtil garantit que le code évite d'accéder à nums[j 1] lorsque j est à sa valeur maximale valide (nums.length - 2).

Autres considérations

  • Taille du tableau : La déclaration initiale du tableau int [] nums = new int [(int) name.length()]; est également potentiellement problématique. La longueur du nom de fichier n'a aucun rapport avec le nombre d'entiers contenus dans le fichier. Il est préférable de dimensionner dynamiquement le tableau en fonction du nombre réel d'entiers lus dans le fichier, ou d'utiliser une structure de données plus flexible comme ArrayList.

  • Gestion des erreurs : Un code robuste inclut une gestion des erreurs (par exemple, try-catch blocs) pour gérer les exceptions potentielles telles que FileNotFoundException ou NumberFormatException lors de la saisie d'un fichier.

En comprenant la cause et en appliquant la solution fournie, vous pouvez prévenir et résoudre efficacement ArrayIndexOutOfBoundsException les erreurs dans vos programmes. N'oubliez pas de réfléchir attentivement au dimensionnement des tableaux et d'intégrer une gestion complète des erreurs pour un code robuste et fiable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn