Excepción fuera de los límites del índice de array en Java

Java admite la creación y manipulación de arrays como una estructura de datos. El índice de una array es un valor entero que tiene valor en el intervalo [0, n-1], donde n es el tamaño de la array. Si se realiza una solicitud de un índice negativo o mayor que o igual al tamaño de la array, JAVA lanza una excepción ArrayIndexOutOfBounds. Esto es diferente a C/C++, donde no se realiza ningún índice de la verificación enlazada.

ArrayIndexOutOfBoundsException  es una excepción  de tiempo de ejecución lanzada solo en tiempo de ejecución. El compilador de Java no busca este error durante la compilación de un programa.

Java

// A Common cause index out of bound
public class NewClass2 {
    public static void main(String[] args)
    {
        int ar[] = { 1, 2, 3, 4, 5 };
        for (int i = 0; i <= ar.length; i++)
            System.out.println(ar[i]);
    }
}

Rendimiento esperado: 

1
2
3
4
5

Salida original:

El error de tiempo de ejecución arroja una excepción: 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at NewClass2.main(NewClass2.java:5)

Aquí, si observa detenidamente, la array tiene un tamaño de 5. Por lo tanto, al acceder a su elemento mediante el ciclo for, el valor de índice máximo puede ser 4, pero en nuestro programa, va hasta 5 y, por lo tanto, es la excepción.

Veamos otro ejemplo usando ArrayList:

Java

// One more example with index out of bound
import java.util.ArrayList;
public class NewClass2
{
    public static void main(String[] args)
    {
        ArrayList<String> lis = new ArrayList<>();
        lis.add("My");
        lis.add("Name");
        System.out.println(lis.get(2));
    }
}

El error de tiempo de ejecución aquí es un poco más informativo que el tiempo anterior. 

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at NewClass2.main(NewClass2.java:7)

Vamos a entenderlo con un poco de detalle:

  • Índice aquí define el índice al que estamos tratando de acceder.
  • El tamaño nos da información sobre el tamaño de la lista.
  • Dado que el tamaño es 2, el último índice al que podemos acceder es (2-1)=1 y, por lo tanto, la excepción.

La forma correcta de acceder a la array es: 
 

for (int i=0; i<ar.length; i++){

}

Código correcto – 

Java

// Correct code for Example 1
public class NewClass2 {
    public static void main(String[] args)
    {
        int ar[] = { 1, 2, 3, 4, 5 };
  
        for (int i = 0; i < ar.length; i++)
            System.out.println(ar[i]);
    }
}
Producción

1
2
3
4
5

Manejo de la excepción:

1. Usando el bucle for-each : 

Esto maneja automáticamente los índices al acceder a los elementos de una array.

Sintaxis: 

for(int m : ar){
}

Ejemplo:

Java

// Handling exceptions using for-each loop
import java.io.*;
  
class GFG {
    public static void main (String[] args) {
          
          int arr[] = {1,2,3,4,5};
        
          for(int num : arr){
               
             System.out.println(num);     
            
        }
    }
}
Producción

1
2
3
4
5

2. Usando Try-Catch : 

Considere encerrar su código dentro de una instrucción try-catch y manipule la excepción en consecuencia. Como se mencionó, Java no le permitirá acceder a un índice no válido y definitivamente lanzará una ArrayIndexOutOfBoundsException. Sin embargo, debemos tener cuidado dentro del bloque de la instrucción catch porque si no manejamos la excepción adecuadamente, podemos ocultarla y, por lo tanto, crear un error en su aplicación.

Java

// Handling exception using try catch block
public class NewClass2 {
    public static void main(String[] args)
    {
        int ar[] = { 1, 2, 3, 4, 5 };
        try {
            for (int i = 0; i <= ar.length; i++)
                System.out.print(ar[i]+" ");
        }
        catch (Exception e) {
            System.out.println("\nException caught");
        }
    }
}
Producción

1 2 3 4 5 
Exception caught

Aquí, en el ejemplo anterior, puede ver que hasta el índice 4 (valor 5), el bucle imprimió todos los valores, pero tan pronto como intentamos acceder a arr[5], el programa lanzó una excepción que es atrapada por catch bloque, e imprimió la declaración «Excepción capturada».

Explore la pregunta  del cuestionario.

Este artículo es una contribución de Rishabh Mahrsee . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *