web-dev-qa-db-fra.com

Vérification hors limites dans Java

J'essaie de vérifier si un emplacement de tableau est hors limites, quel est le moyen le plus simple?

int[] arr;
populate(arr);
if(arr[-1] == null)
//out of bounds!

Quelque chose comme ce travail?

Je suis sûr que cela peut être fait avec un trycatch ou un scanner, mais pour un simple petit programme, existe-t-il une autre façon?

14
dukevin

Absolument n'utilisez pas try-catch pour cela. Utilisez simplement:

boolean inBounds = (index >= 0) && (index < array.length);

L'implémentation de l'approche avec try-catch impliquerait d'attraper un ArrayIndexOutOfBoundsException , qui est une exception non vérifiée (c'est-à-dire une sous-classe de RuntimeException ). De telles exceptions ne devraient jamais (ou, au moins, très rarement) être interceptées et traitées. Au lieu de cela, ils devraient être évités en premier lieu.

En d'autres termes, les exceptions non vérifiées sont des exceptions dont votre programme est ne devrait pas récupérer. Maintenant, il peut y avoir des exceptions (sans jeu de mots) à ceci ici et là. Par exemple, il est devenu courant de vérifier si une chaîne est une parabole en tant qu'entier en appelant Integer.parseInt() dessus et en capturant le potentiel NumberFormatException (qui n'est pas coché). Ceci est considéré comme OK, mais réfléchissez toujours à deux fois avant de faire quelque chose comme ça.

34
arshajii

Non, cela provoquera une exception.

Au lieu de cela, faites

if (x < 0 || x >= arr.length) {
    //x is out of bounds!
}
3
Paul Draper

Il est préférable de vérifier si l'index est dans la plage manuellement.

if(index >=0 && index < array.length){
   // in range
}  

Les exceptions non vérifiées, c'est-à-dire qui ne nécessitent pas de bloc try-catch, ne doivent pas être interceptées. ArrayIndexOutOfBoundsException en fait partie.

Toutes les exceptions non vérifiées proviennent de la classe RuntimeException.
De cette classe vient le IndexOutOfBoundsException
Ceci est plus spécialisé dans StringIndexOutOfBounds et ArrayIndexOutOfBounds

RuntimeException est la superclasse de ces exceptions qui peuvent être levées pendant le fonctionnement normal de la machine virtuelle Java.

RuntimeException et ses sous-classes sont des exceptions non vérifiées. Les exceptions non contrôlées n'ont pas besoin d'être déclarées dans une méthode ou une clause throws du constructeur si elles peuvent être levées par l'exécution de la méthode ou du constructeur et se propager en dehors de la frontière de la méthode ou du constructeur.

2
Little Child