Java - Problema con Scanner

   
Vista:

Problema con Scanner

Publicado por Juan (2 intervenciones) el 03/11/2014 01:25:41
Hola a todos, tengo una duda, quisiera ver si me peden ayudar con Scanner.
al tengo variables de diferentes tipos (generalmente int y String), el caso es que al momento de capturar un valor (variable_int=nombre.nextInt();) y posteriormente capturar un valor de tipo String (variale_String=nombre.nextLine();), al momento de correr el programa me pide insertar el valor de tipo entero, sin embargo no me pide capturar el valor String, y me salta a la siguiente instruccion. lo que hago es definir un objeto Scanner para capturar las variables de tipo Int, y otro Scanner para capturar las variables de tipo String. mi pregunta es, existe algun otro procedimimento para poder hacer la captura con un solo objeto de tipo Scanner y evitar tener demaciados objetos de tipo Scanner para cada tipo de variable?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de GP

Problema con Scanner

Publicado por GP (19 intervenciones) el 03/11/2014 22:40:35
Cuando se ingresan datos por consola, estos datos se guardan en un espacio de memoria temporal denominado buffer.

Al finalizar de ingresar un dato, se presiona la tecla Enter, la cual también es almacenada en el buffer como un salto de línea ‘\n’, junto con los datos.

El método nextLine ( ) extrae del buffer todos los caracteres que encuentra hasta llegar al Enter, el cual es eliminado del buffer.

Los métodos nextInt ( ) y nextDouble ( ) extraen el dato numérico, lo asignan a la variable, pero dejan el ‘\n’, que es lo único que queda al final en el buffer.

Cuando se invoca nextLine ( ) después de cualquiera de los dos métodos anteriores, lo que ocurre es que como en el buffer hay aún un dato (el ‘\n’), lo procesa inmediatamente como se describió antes, es decir, lee los caracteres hasta encontrar el ‘\n’, pero como ya no hay caracteres antes del ‘\n’, no lee ninguno, a continuación elimina el ‘\n’ y finalmente a la variable se le asigna la cadena vacía.

Una solución, utilizando un único objeto Scanner, es invocar nextLine(); después del ingreso del dato numérico y antes del ingreso de la cadena, para que de esta manera dicha sentencia elimine el ‘\n’ y el buffer quede vacío antes de leer la cadena.


import java.util.Scanner;

class LeerDatos
{
public static void main (String[ ] args)
{
int entero;
String cadena;

Scanner input = new Scanner(System.in);

System.out.print("Ingrese entero: ");
entero = input.nextInt();
System.out.print("Dato ingresado: " + entero);

// Esta es la línea que se debe agregar
input.nexLine();

System.out.print("Ingrese cadena: ");
entero = input.nexLine();
System.out.print("Dato ingresado: " + cadena);
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema con Scanner

Publicado por juan sanchez (2 intervenciones) el 12/11/2014 08:28:23
muchas gracias, me sirvio de manera exelente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar