domingo, 19 de febrero de 2017

Problema con nextLine(). Se salta una línea.

Hola a todos.  Seguramente alguna vez te haya pasado que quieras pedir datos por consola y a la hora de ir introduciendo los datos, de pronto te das cuenta que se ha saltado una línea y te preguntes porqué narices hace eso Java. Pues bien sigue leyendo y sabrás porqué pasa esto y aprenderás 3 maneras de solucionarlo.


Este problema pasa cuando queremos leer un tipo de dato numético, sea del tipo que sea y seguidamente queremos leer un String. Por ejemplo:

import java.util.Scanner;

public class Programa {
     
    public static void main(String[] args) {
         
       Scanner sca = new Scanner(System.in);
       
       int edad;
       String nombre;
       
        System.out.println("Introduce edad: ");
        edad = sca.nextInt();
        System.out.println("Introduce nombre: ");
        nombre = sca.nextLine();
        
    }
}



En este caso pediremos por consola la edad, cuando le demos al enter se mostrará el texto "Introduce nombre: " pero seguidamente acabará el programa y se saltará esa línea.
Esto se debe a que cuando introducimos el número y le damos al enter, se guarda el enter del Scanner y cuando llama al método nextLine() como guarda el enter automáticamente salta pensando que hemos pulsado enter sin introducir nada.

¿Cómo solucionamos este problema?

Pues para solucionar este problema tenemos 3 soluciones:

1-Leer el tipo de dato como String y luego hacer un casting y convertirlo al tipo de dato que queramos.
2-Después de leer el tipo de dato entero introducimos un nextLine(). Como por ejemplo:

import java.util.Scanner;

public class Programa {
     
    public static void main(String[] args) {
         
       Scanner sca = new Scanner(System.in);
       
       int edad;
       String nombre;
       
        System.out.println("Introduce edad: ");
        edad = sca.nextInt();
        sca.nextLine();
        System.out.println("Introduce nombre: ");
        nombre = sca.nextLine();
        
    }
}

3-La tercera opción es la de utilizar el método skip("\n");

import java.util.Scanner;

public class Programa {
     
    public static void main(String[] args) {
         
       Scanner sca = new Scanner(System.in);
       
       int edad;
       String nombre;
       
        System.out.println("Introduce edad: ");
        edad = sca.nextInt();
        sca.skip("\n");
        System.out.println("Introduce nombre: ");
        nombre = sca.nextLine();
        
    }
}

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...