Problema con nextLine(), como evitar salto de linea

Iniciado por razler, 29 Agosto 2011, 03:34 AM

0 Miembros y 1 Visitante están viendo este tema.

razler

hola  tengo un problema con el scanner, lo que sucede es que cuando deseo leer string con el nextLine() , en consola de salta a la otra instruccion, por ejemplo.

Código (java) [Seleccionar]
System.out.print("Ingrese el Alumno: ");
System.out.print("Nombre ---> ");
n = in.nextLine();
System.out.print("Nota ---> ");
s = in.nextDouble();
System.out.print("Codigo ---> ");
j = in.nextDouble();


Luego me resulta  en consola de manera

Ingrese el Alumno:
Nombre ---> Nota --->

Es decir se salta la instrucción de leer el nombre ,y solo lee la nota y realiza la instrucciones que esten debajo.
Como debo hacer para evitar esto empleando el nextLine()?
Agradeceria mucho su ayuda   :)


Debci

No si es a lo que te refieres, pero quieres evitar que se suban los textos unos encima de otros?

Código (java) [Seleccionar]
System.out.print("Ingrese el Alumno: ");
System.out.print("Nombre ---> \n");
n = in.nextLine();
System.out.print("Codigo ---> \n");
s = in.nextDouble();
System.out.print("Nota ---> \n");
j = in.nextDouble();


Corrígeme si no era eso, y en cualquier caso explícate un poquito mejor.

Un saludo!

razler

Bueno no es debido al salto de linea ,ya que si coloco como me dices seria igual, osea el resultado en consola seria :

Ingrese el Alumno:
Nombre --->
Nota --->

Solo podría leer nota mas no nombre y las demás instrucciones que estén debajo. Este problema ocurre con los strings. En c++ se podria evitar esto empleando el fflush() pero en java no se como se realizaria. Tambien podria evitarlo usando bufferreader , pero en una lectura con nextLine() como podria evitar este inconveniente ?

RyogiShiki

Eso se debe a que la posición de lectura está justo después de un salto de linea, lo que te retornara una cadena vacia, así que te sugiero que después de leer cualquier número (int, double, float) agregues la siguiente linea para evitar dicho inconveniente:

Código (java) [Seleccionar]
in.skip("\n");

Saludos


Valkyr

Y porqué no haces un BufferedReader y vas leyendo línea a línea, es decir, en la primera línea lees el nombre, en la siguiente línea lees el decimal y lo parseas con Double.parseDouble, después lees el otro y haces lo mismo.

Es decir, sería algo así:

Código (java) [Seleccionar]

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Ingrese Alumno:");
System.out.println("Nombre: ");
n = in.readLine();
System.out.println("Codigo: ");
s = Double.parseDouble(in.readLine());
System.out.println("Nota: ");
j = Double.parseDouble(in.readLine());


Saludos.

razler

Gracias gankutsuo , con ese metodo era suficiente aohra peudo leer sin problemas :)