Solución para la excepción fuera de los límites del índice Java Lang

Mehvish Ashiq 11 diciembre 2023
  1. Causas de la excepción java.lang.IndexOutOfBoundsException
  2. Solución para la excepción java.lang.IndexOutOfBoundsException considerando ArrayList
  3. Solución para la excepción java.lang.ArrayIndexOutOfBoundsException considerando arreglos
Solución para la excepción fuera de los límites del índice Java Lang

Hoy, discutiremos el error IndexOutOfBoundsException considerando Arrays y ArrayList. También entenderemos las razones que causan este error y, finalmente, cómo solucionarlo.

Causas de la excepción java.lang.IndexOutOfBoundsException

Las razones para tener el error IndexOutOfBoundsException son similares en Arrays y ArrayList, excepto por una diferencia que es tener diferentes descripciones de error. Obtenemos este error en Arrays y ArrayList como java.lang.ArrayIndexOutOfBoundsException y java.lang.IndexOutOfBoundsException, respectivamente.

Las razones que causan esta excepción se enumeran a continuación:

  1. Cuando ArrayList esté vacío e intente acceder al valor en el primer índice, que es 0.
  2. Cuando intentamos acceder a un elemento en un Array o ArrayList en un índice negativo.
  3. Cuando intentamos acceder a un índice no válido de un Array o ArrayList, que puede ser negativo, igual o mayor que el tamaño de Array o ArrayList.

Recuerde que IndexOutOfBoundsException es una excepción en tiempo de ejecución que el compilador de Java no detecta en el momento de la compilación. Entonces, es necesario saber cómo acceder al Array o ArrayList.

La regla general es que Array o ArrayList deben completarse antes de acceder a ellos. Además, solo podemos acceder a los índices que cumplan esta condición: 0 <= index < (Array/ArrayList size).

Aprendamos con la ayuda de ejemplos de código.

Solución para la excepción java.lang.IndexOutOfBoundsException considerando ArrayList

Código de ejemplo:

import java.util.ArrayList;

public class TestArrayList {
  public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    // we try to get value at index 0 which is
    // empty right now
    System.out.println(list.get(0));
    list.add("Mehvish"); // saves at index 0
    list.add("Ashiq"); // saves at index 1
  }
}

El código anterior está causando el error IndexOutOfBoundsException porque estamos accediendo al índice 0, que aún no está poblado.

Para resolver este error, primero debemos agregar elementos en ArrayList y luego acceder a ellos asegurándonos de que no estamos accediendo a un índice no válido. En el siguiente código, hemos manejado todas las situaciones que pueden causar IndexOutOfBoundsException.

Código de ejemplo:

import java.util.ArrayList;

public class TestArrayList {
  // create array list object of String type
  static ArrayList<String> list = new ArrayList<>();

  // populate array list
  static void populateList() {
    list.add("Mehvish"); // saves at index 0
    list.add("Ashiq"); // saves at index 1
  }
  /*
  Access the index only if the index
  is valid and the list is not empty. Otherwise, print
  the message to inform the user
  */
  static void getElement(int index) {
    if (list.size() != 0 && index >= 0 && index < list.size()) {
      System.out.println(list.get(index));
    } else {
      System.out.println("The list is empty or you have entered an invalid index");
    }
  }
  // main method
  public static void main(String[] args) {
    populateList();
    getElement(0);
  }
}

Probemos este código en varias entradas.

Prueba 1: El usuario pasa 0 a la función getElement(), la salida sería,

Mehvish

Prueba 2: el usuario pasa 1 a la función getElement(), la salida se verá así,

Ashiq

Prueba 3: El usuario pasa 2 a la función getElement(), la salida sería,

The list is empty or you have entered an invalid index

Prueba 4: El usuario pasa -1 a la función getElement(), el resultado es el siguiente,

The list is empty or you have entered an invalid index

Prueba 5: El usuario comenta sobre la función populateList() y pasa un índice válido. La salida se verá de la siguiente manera,

The list is empty or you have entered an invalid index

Solución para la excepción java.lang.ArrayIndexOutOfBoundsException considerando arreglos

Código de ejemplo:

public class TestArray {
  public static void main(String[] args) {
    int array[] = {1, 2, 3, 4, 5};
    for (int i = 0; i <= array.length; i++) System.out.println(array[i]);
  }
}

Este ejemplo de código provoca la excepción ArrayIndexOfBoundsException al intentar acceder al índice 5, que no es válido. Recuerde, no podemos acceder a un índice inválido.

Probemos el siguiente código, que ha manejado todas las situaciones posibles y ha evitado el error ArrayIndexOutOfBoundsException.

Código de ejemplo:

import java.util.ArrayList;

public class TestArray {
  // required size of an array
  static int size = 2;
  // declare an int type array of specified size
  static int array[] = new int[size];

  // populate array
  static void populateArray() {
    for (int i = 0; i < size; i++) array[i] = i + 1;
  }

  // get element if a valid index is passed
  static void getElement(int index) {
    if (array.length != 0 && index >= 0 && index < array.length) {
      System.out.println(array[index]);
    } else {
      System.out.println("The array is empty or you have entered an invalid index");
    }
  }

  // main method
  public static void main(String[] args) {
    populateArray();
    getElement(1);
  }
}

Probemos este código en diferentes entradas de usuario.

Prueba 1: El usuario pasa 0 a la función getElement(), la salida sería,

1

Prueba 2: el usuario pasa 1 a la función getElement(), la salida se verá así,

2

Prueba 3: El usuario pasa 2 a la función getElement(), la salida sería,

The array is empty or you have entered an invalid index

Prueba 4: El usuario pasa -1 a la función getElement(), el resultado es el siguiente,

The array is empty or you have entered an invalid index

Prueba 5: El usuario comenta sobre la función populateArray() y pasa un índice válido. La salida se verá de la siguiente manera,

0

¿Por qué es 0? Es porque hemos inicializado una matriz vacía donde 0 es un valor predeterminado para el tipo int. Si no inicializamos los elementos, los valores predeterminados de los elementos de la matriz numérica se establecen en 0, mientras que los elementos de referencia se establecen en nulo.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - Java Error

Artículo relacionado - Java Exception