Para que el usuario pueda introducir datos a través de la consola, Java dispone de la clase «Scanner».
import java.util.Scanner;
public class Entrada {
public static void main(String[] args) {
System.out.print("Dime como te llamas: ");
Scanner mi_scanner = new Scanner(System.in);
String nombre = mi_scanner.nextLine();
System.out.print("Hola "+nombre+" ¿Cuántos años tienes?: ");
int edad=mi_scanner.nextInt();
System.out.print("\"¡Bienvenido "+nombre+". ¡Me alegro de verte por aquí!");
}
}Un posible ejemplo de ejecución:
Dime como te llamas: Eduardo
Hola Eduardo ¿Cuántos años tienes?: 60
"¡Bienvenido Eduardo. ¡Me alegro de verte por aquí!Para poder usar la clase Scanner debemos de ejecutar al inicio del código la instrucción «import java.util.Scanner;»
Primero debemos declarar un objeto que pertenezca a la clase Scanner. En este caso se ha llamado a dicho objeto «mi_scanner». La sintaxis para declarar este objeto es «new Scanner(System.in)». A continuación utilizando este objeto, se solicita al usuario un tipo determinado de dato, por ejemplo «String nombre = mi_scanner.nextLine( )» ;
Esta clase admite diferentes formatos de uso. Según que se espere un tipo de dato u otro, el método a usar es diferente:
- nombre_scanner.next ( ) : Espera una palabra.
- nombre_scanner.nextLine ( ) : Espera una línea completa de texto.
- nombre_scanner.nextInt ( ) : Espera un dato de tipo entero.
- nombre_scanner.nextDouble ( ) : Espera un dato decimal.
- nombre_scanner.Boolean ( ) : Espera un dato Booleano.
Si utilizamos alguno de estos métodos, pero introducimos un dato de otro tipo diferente, la ejecución del programa dará error. La forma de solucinar este problema es capturar y gestionar este posible error.
Debemos de tener en cuenta además un detalle muy importante. Cuando ejecutamos scanner.nextInt (u otro que no sea .nextLine), el flujo de programa va a tomar el dato que necesita (un entero o un double) y va a guardar en el buffer de entrada el Return que le hemos dado. Si luego llamamos a scanner.nextLine, el buffer restante (que será el Return) se le va a asignar a scanner.nextLine directamente, lo cual nos llevará a resultados incorrectos.
import java.util.Scanner;
public class Entrada {
public static void main(String[] args) {
Scanner mi_scanner = new Scanner(System.in);
System.out.print("¿Cuántos años tienes?: ");
int edad=mi_scanner.nextInt();
System.out.print("Dime como te llamas: ");
String nombre = mi_scanner.nextLine();
System.out.println("Bienvenido "+nombre+". Tienes "+edad+" años.");
}
}Resultado:
¿Cuántos años tienes?: 35
Dime como te llamas: Bienvenido . Tienes 35 años.La solución puede ser añadir un scanner.nextLine que nos recoja la basura (el Return) de la instrucción anterior:
import java.util.Scanner;
public class Entrada {
public static void main(String[] args) {
Scanner mi_scanner = new Scanner(System.in);
System.out.print("¿Cuántos años tienes?: ");
int edad=mi_scanner.nextInt();
String basura=mi_scanner.nextLine();
System.out.print("Dime como te llamas: ");
String nombre = mi_scanner.nextLine();
System.out.println("Bienvenido "+nombre+". Tienes "+edad+" años.");
}
}Resultado:
¿Cuántos años tienes?: 35
Dime como te llamas: Eduardo
Bienvenido Eduardo. Tienes 35 años.