¿Qué es InputMismatchException en Java y cómo manejarlo?

| Última modificación: 30 de julio de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En el proceso de aprender a programar con Java podemos encontrarnos con ciertos baches que pueden tener un nivel de dificultad considerable si no sabemos cómo manejarlos, pero cuya solución es simple. Uno de estos llamados baches son los errores InputMismatchException en Java, de los más comunes que existen y de los más fáciles de solucionar. Veamos en qué consiste este error y cómo podemos darle pronta y fácil solución.

InputMismatchException en Java

¿Qué es InputMismatchException en Java?

La alerta InputMismatchException en Java es producida al introducir un tipo de dato que no coincide con el que estaba esperando el programa. Por ejemplo, si el usuario llega a introducir una cadena de texto, pero el programa está codificado para recibir un entero, aparecería este error o alerta.

Sintaxis de InputMismatchException

La clase InputMismatchException extiende la clase NoSuchElementException. La sintaxis básica quedaría del siguiente modo:

public class InputMismatchException extends NoSuchElementException {
public InputMismatchException() {
super();
}

public InputMismatchException(String s) {
super(s);
}
}

Veamos el desglose de este código para entender mejor en qué consiste el InputMismatchException en Java:

  • Definición de la clase
public class InputMismatchException extends NoSuchElementException {
// Constructores y métodos aquí
}

Este fragmento nos indica que InputMismatchException es una clase pública que extiende (hereda de) NoSuchElementException. Esto quiere decir que InputMismatchException es un tipo especializado de NoSuchElementException.

  • Constructores

La clase InputMismatchException tiene dos constructores:

  1. Constructor por defecto: public InputMismatchException() { super(); } Este constructor Java crea una nueva instancia de InputMismatchException sin un mensaje de error específico. La llamada a super() invoca el constructor de la clase base (NoSuchElementException), que inicializa la excepción sin ningún mensaje.
  2. Constructor con mensaje:
    java public InputMismatchException(String s) { super(s); }
    Este constructor permite crear una nueva instancia de InputMismatchException con un mensaje de error específico (String s). La llamada a super(s) pasa este mensaje al constructor de la clase base (NoSuchElementException), que guarda el mensaje para que pueda ser recuperado más tarde utilizando el método getMessage().

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

De modo que…
La clase InputMismatchException extiende NoSuchElementException, lo que significa que hereda todos los comportamientos y propiedades de NoSuchElementException. Esto permite que InputMismatchException sea tratada como una excepción de tipo NoSuchElementException.

Cómo manejar InputMismatchException en Java

Para manejar el InputMismatchException en Java, debemos hacer uso de un bloque try-catch. Veamos cómo implementarlo con el siguiente ejemplo:

//InputMismatchException en Java
import java.util.InputMismatchException;
import java.util.Scanner;

public class ManejarInputMismatchException {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Introduce un número entero: ");
try {
int numero = scanner.nextInt();
System.out.println("Has introducido el número: " + numero);
} catch (InputMismatchException e) {
System.out.println("¡Cuidado! Solo puedes introducir números enteros.");
}
}
}

Aquí, en este ejercicio:

  • Pedimos al usuario que introduzca un número entero.
  • Utilizamos scanner.nextInt() para leer la entrada.
  • Si el usuario introduce un valor que no es un entero, se lanza una InputMismatchException y mostramos un mensaje de error.

Manejo avanzado de InputMismatchException

Existirán ocasiones en las que necesitemos que el programa siga solicitando una entrada válida hasta que el usuario introduzca un valor correcto. Si queremos lograr esto, podemos usar un bucle do-while.

//InputMismatchException en Java
import java.util.InputMismatchException;
import java.util.Scanner;

public class ManejoAvanzadoInputMismatchException {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numero = 0;
boolean entradaValida = false;

do {
System.out.println("Introduce un número entero: ");
try {
numero = scanner.nextInt();
entradaValida = true;
} catch (InputMismatchException e) {
System.out.println("¡Cuidado! Solo puedes introducir números enteros.");
scanner.next(); // Limpiar la entrada inválida
}
} while (!entradaValida);

System.out.println("Has introducido el número: " + numero);
}
}

Una explicación detallada de nuestro código, paso a paso:

  • Utilizamos un bucle do-while para seguir solicitando una entrada válida.
  • La variable entradaValida se utiliza para controlar si la entrada es correcta.
  • Dentro del bloque catch, utilizamos scanner.next() para limpiar la entrada inválida y permitir al usuario intentarlo de nuevo.

Evitar InputMismatchException con Scanner.nextInt()

El InputMismatchException se arroja por la clase Scanner cuando el elemento recibido no corresponde al tipo de dato esperado. Veamos cómo evitar este error por medio de un ejemplo con validación continua:

//InputMismatchException en Java
import java.util.InputMismatchException;
import java.util.Scanner;

public class EvitarInputMismatchException {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int numero = 0;

System.out.println("Introduce números. Escribe 0 para salir.");

while (true) {
System.out.print("Número: ");
try {
numero = scanner.nextInt();
if (numero == 0) break;
System.out.println("Has introducido el número: " + numero);
} catch (InputMismatchException e) {
System.out.println("¡Cuidado! Solo puedes introducir números enteros.");
scanner.next(); // Limpiar la entrada inválida
}
}
}
}

Para este ejercicio:

  • Pedimos al usuario que introduzca números en un bucle continuo hasta que introduzca 0.
  • Utilizamos scanner.next() en el bloque catch para limpiar la entrada inválida y permitir al usuario intentarlo de nuevo.

Como viste, el error de InputMismatchException en Java puede llegar a ser típico en el momento de introducir datos y que estos sean capturados en una variable. De ahí que sea importante que aprendas a identificarlo y a solucionarlo.

Si quieres seguir aprendiendo más sobre el lenguaje de programación más popular del mundo, te invitamos a que sigas nuestro bootcamp sobre java, un compendio de todo lo que necesitas saber para incursionar en el mercado laboral en esta área. Elige los mejores empleos y no esperes que te elijan a ti. ¡Únete ahora y recibe la mejor formación!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python en solo 4 meses.