Java - Salto de linea nextline

 
Vista:
sin imagen de perfil

Salto de linea nextline

Publicado por gaston (1 intervención) el 19/08/2017 00:40:58
Hola tengo un pequeño problemita con este codigo al ejecutarlo por primera vez en la consola no tengo problema pero al siguiente me salta una linea no me deja cargar el nombre y arranca del apellido alguna ayuda para solucionarlo?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.Scanner;
 
/**
 *
 * @author gasto
 */
public class Test
{
    public static void main(String[] args)
    {
        Persona Personaa = new Persona();
 
        Scanner teclado = new Scanner (System.in);
 
        Personaa.Nombre();
 
        String Nombre1 = teclado.nextLine();
 
        Personaa.Apellido();
 
        String Apellido1 = teclado.nextLine();
 
        Personaa.Direcion();
 
        String Direccion1 = teclado.nextLine();
 
        Personaa.Email();
 
        String Email1 = teclado.nextLine();
 
        Personaa.Telefono();
 
        int Telefono1 = teclado.nextInt();
 
        Personaa.Dni();
 
        int Dni1 = teclado.nextInt();

Consola al ejecutarlo

run:
Ingrese Nombre:
fafae
Ingrese Apellido:
efaf
Ingrese Direccion:
afefa
Ingrese Email:
seaf
Ingrese Telefono:
352325
Ingrese Dni:
35345
---------------*--------------
Ingrese Nombre: ESTA ENTRADA NO ME DEJA CARGARLAAA!!
Ingrese Apellido:
sadfsag
Ingrese Direccion:
gsgaa
Ingrese Email:
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Salto de linea nextline

Publicado por Kabuto (1381 intervenciones) el 31/08/2017 14:13:22
Hola,

despues de hacer una lectura de valores numéricos, ya sea con nextInt(), nextDouble(), etc...
... luego tendrás problemas para leer un String con nextLine();

La solucion es hacer un nextLine(); tras terminar de leer numeros, pero sin asignarlo a ninguna variable:

1
2
3
4
5
6
7
8
9
10
11
12
13
String Email1 = teclado.nextLine();
 
Personaa.Telefono();
 
int Telefono1 = teclado.nextInt();
 
Personaa.Dni();
 
int Dni1 = teclado.nextInt();
 
teclado.nextLine();//Tras leer numeros, hacemos este nextLine() sin guardarlo en ninguna variable
//para que el sistema recoja el caracter de "retorno de carro" \r que ha  estado ignorando el nextInt()
//Así no habrá problemas para volver a leer Strings cuando se repita el programa


Esto es porque cuando tu tecleas un numero, por ejemplo el 9 y pulsas intro para introducirlo, en realidad estás introduciendo dos caracteres:
el 9 y el caracter de "retorno de carro" \r

Entonces, el método nextInt() solo coge el valor que le interesa, el 9 porque es un numérico, e ignora el \r. Pero el \r permanece en el flujo de entrada de datos.

Debido a esto, la próxima vez que ordenamos un nextLine() para leer un String, este nextLine(); se encuentra con que ya hay un \r el flujo de datos y entonces interpreta que es porque el usuario ya ha pulsado intro y recoger el \r dando por finalizada la inserción de datos.

Por esto te falla la primera lectura de String tras haber leido datos numéricos.

Haciendo un nextLine(); tras terminar de leer numeros, conseguimos "limpiar" el flujo de datos eliminando el caracter \r que ha estado permaneciendo tras cada lectura de números.
Y así la próxima lectura de Strings, no fallará, porque ya no habrá un caracter \r que haga creer al sistema que el usuario ha pulsado intro.

Espero haberme sabido explicar. Esto nos ocurre a todos los que hemos iniciado nuestro aprendizaje con Java.
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