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.
¿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:
- Constructor por defecto:
public InputMismatchException() { super(); }
Este constructor Java crea una nueva instancia deInputMismatchException
sin un mensaje de error específico. La llamada asuper()
invoca el constructor de la clase base (NoSuchElementException
), que inicializa la excepción sin ningún mensaje. - Constructor con mensaje:
java public InputMismatchException(String s) { super(s); }
Este constructor permite crear una nueva instancia deInputMismatchException
con un mensaje de error específico (String s
). La llamada asuper(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étodogetMessage()
.
🔴 ¿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 semanaDe 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
, utilizamosscanner.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 bloquecatch
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!