¿Cómo arreglar java.util.NoSuchElementException en Java?

Un evento inesperado y no deseado que interrumpe el flujo normal de un programa se llama Excepción . La mayoría de las veces, las excepciones son causadas por nuestro programa y son recuperables. Supongamos que si el requisito de nuestro programa es leer datos del archivo remoto ubicado en los EE. UU. En tiempo de ejecución, si un archivo remoto no está disponible, obtendremos RuntimeException diciendo fileNotFoundException. Si se produce la excepción fileNotFoundException, podemos proporcionar el archivo local al programa para que lo lea y continúe con el resto del programa normalmente.

Hay principalmente dos tipos de excepción en Java de la siguiente manera:

1. Excepción comprobada: la excepción que comprueba el compilador para la ejecución sin problemas del programa en tiempo de ejecución se denomina excepción comprobada. En nuestro programa, si existe la posibilidad de que aumenten las excepciones verificadas, entonces es obligatorio que manejemos esa excepción verificada (ya sea mediante la palabra clave try-catch o throws); de lo contrario, obtendremos el error en tiempo de compilación. Ejemplos de excepciones verificadas son ClassNotFoundException, IOException, SQLException, etc.

2. Excepción no verificada: las excepciones que no son verificadas por el compilador, ya sea que el programador las maneje o no, se denominan excepciones no verificadas. Ejemplos de excepciones no verificadas son ArithmeticException, ArrayStoreException, etc.

Ya sea que la excepción esté marcada o no, cada excepción ocurre en tiempo de ejecución solo si no hay posibilidad de que ocurra ninguna excepción en tiempo de compilación.

NoSuchElementException:

Es la clase secundaria de RuntimeException y, por lo tanto, es una excepción no verificada. JVM genera automáticamente esta excepción y la proporcionan los métodos de acceso de Enumeración, Iterador o Tokenizer, como next() o nextElement() o nextToken() cuando intentamos acceder al contenido de una array, colección o cualquier otro objeto. y si estos objetos están vacíos o si estamos tratando de obtener el siguiente elemento después de llegar al final de un objeto, obtendremos java.util.NoSuchElementException.

En el siguiente ejemplo, intentamos acceder a un HashMap utilizando el método de acceso next() de la clase Iterator, pero como el HashMap está vacío, obtendremos NoSuchElementException.

Ejemplo 1:

Java

// Java program to demonstrate the occurrence of
// NoSuchElementException
 
// import required packages
import java.io.*;
import java.lang.*;
import java.util.*;
 
// driver class
class Geek {
   
    // main method
    public static void main(String[] args)
    {
        // creating an hashmap object
        HashMap<Integer, Integer> map = new HashMap<>();
       
        // creating an iterator
        Iterator itr = map.keySet().iterator();
       
        // trying to access the element
        itr.next();
    }
}

Ejemplo 2: Aquí estamos tratando de acceder al elemento de un objeto vectorial vacío a través de un enumerador.

Java

// Java program to demonstrate the occurrence of
// NoSuchElementException
 
// import required packages
 
import java.io.*;
import java.lang.*;
import java.util.*;
 
// driver class
class Geek {
   
    // main method
    public static void main(String[] args)
    {
        // creating an vector object
        Vector<Integer> v = new Vector<>();
       
        // creating an enumerator
        Enumeration enumerator = v.elements();
       
        // trying to access the element
        enumerator.nextElement();
    }
}

¿Cómo resolver este error?

Casi todas las clases cuyos métodos de acceso dan NoSuchElementException contienen su respectivo método para verificar si el objeto contiene más elementos o no. Entonces, para evitar esta NoSuchElementException, siempre debemos llamar,

  • Iterator.hasNext() o
  • Enumeración.hasMoreElements() o
  • hasMoreToken() antes de llamar al método next() o nextElement o nextToken().

A continuación se muestra la implementación de la declaración anterior:

Ejemplo 1:

Java

// Java program to remove the occurrence of
// NoSuchElementException by using hasNext()
 
// import required packages
import java.io.*;
import java.lang.*;
import java.util.*;
 
// driver class
class Geek {
   
    // main method
    public static void main(String[] args)
    {
        // creating an hashmap object
        HashMap<Integer, Integer> map = new HashMap<>();
       
        // creating an iterator
        Iterator itr = map.keySet().iterator();
       
        // checking the map object using .hasNext()
        // method if it has elements to access
        // or not before accessing the map using
        // .next() method
        while (itr.hasNext())
            System.out.println(itr.next());
    }
}

Producción:

 Ejemplo 2:

Java

// Java program to remove the occurrence of
// NoSuchElementException by using hasMoreElements()
 
// import required packages
import java.io.*;
import java.lang.*;
import java.util.*;
 
// driver class
class Geek {
   
    // main method
    public static void main(String[] args)
    {
        // creating an vector object
        Vector<Integer> v = new Vector<>();
       
        // creating an enumerator
        Enumeration enumerator = v.elements();
       
        // Checking the vector object using
        // hasMorelements method if it has elements
        // to access or not before accessing the vector
        // using .nextElement() method
        while (enumerator.hasMoreElements())
            System.out.println(enumerator.nextElement());
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por mroshanmishra0072 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 *