Limpiar el buffer de entrada en Java

Cuando iniciamos la programación en Java o cualquier lenguaje, necesitamos ingresar datos a nuestros programas en su mayoría por medio del teclado (entrada estándar), y a veces cuando lo intentamos ocurren comportamientos extraños y esto normalmente debido a un mal tratamiento del buffer.

Un ejemplo de lo que hablo es este, donde ingresamos el nombre una persona y su edad y luego la mostramos (un ejemplo más básico era imposible) xD.

prog1

Y el resultado de ejecutar el código anterior es:

prog1

Como se puede ver, todo va normal, pero ¿qué pasa si ingreso primero la edad (número) y luego el nombre (String) ?, si se modifica el código de la siguiente forma:

prog1

Y si ejecutamos esto, el resultado es:

prog1

Como se puede ver en la linea roja, antes de que podamos ingresar cualquier palabra en el espacio que le asignamos al nombre, la ejecución salta directamente a mostrar los datos, y esto se debe a que cuando se han ingresado o leído valores numéricos (de cualquier tipo) con los métodos nextInt, nextDouble, etc. deja el caracter ‘\n’ o ‘enter’ en el buffer, por lo tanto, cuando se quiere leer una cadena con el método ‘nextLine()’, esta función inicia la lectura del buffer ¡y lo primero que se encuentra es justamente el carácter de final de cadena! ( ‘\n’ ), es ahí cuando el flujo salta a la siguiente linea, y aunque pensamos que no se leyó nada, si se leyó dicho caracter.

¿Cómo podemos evitar que eso pase?

La forma de evitar que comportamientos de ese tipo sucedan es (justamente como dice el titulo) limpiando el buffer, y lo que hacemos es, antes de seguir ingresando valores importantes para nuestro programa, poner la linea de código que se ve subrayada a continuación:

prog2

 

Así, cuando se ejecuta de nuevo el código, el resultado es el siguiente:

prog3

Cómo se puede observar, el (sencillo) programa continúa su ejecución normal, con el comportamiento esperado (¡ya no hay saltos!). Así de simple se limpia el buffer en Java para la entrada de datos por el teclado.

Espero que esto haya sido de alguna utilidad para vosotros y hasta una próxima entrada.

Autor: Julio Marulanda.

2 comentarios en “Limpiar el buffer de entrada en Java

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s