1. Lectura desde la consola, System.in
En lecciones anteriores nos familiarizamos con los comandos de salida en pantalla. Para ello utilizamos el objeto System.out y sus métodos print() y println(). Sencillo y cómodo.
Pero, como quizá ya te imaginas, la salida en pantalla no es suficiente. El objetivo de la mayoría de los programas es hacer algo útil para el usuario. Por eso muy a menudo necesitamos que el usuario pueda introducir datos con el teclado.
Al igual que para la salida, para la entrada también hay un objeto especial — System.in. Pero, por desgracia para nosotros, no es tan cómodo como nos gustaría. Este objeto permite leer datos del teclado, pero solo de un carácter cada vez.
Por eso utilizaremos otra clase que, junto con el objeto System.in, nos dará todo lo que necesitamos. En Java desde hace tiempo hay clases para todos los casos. Y ahora vamos a conocer una de ellas.
2. Clase Scanner
La clase Scanner (nombre completo java.util.Scanner) sabe leer datos de distintas fuentes: consola, archivos, Internet. Si queremos que lea datos del teclado, debemos pasarle el objeto System.in como parámetro, es decir, como la fuente de datos. El propio objeto de tipo Scanner sabrá qué hacer con ello.
Leer desde el teclado con un objeto de tipo Scanner se vería aproximadamente así:
| Código | Explicación |
|---|---|
|
Creamos un objeto de la clase Scanner. Leemos del teclado una línea de texto. Leemos del teclado un número. |
Parece sencillo, pero ¿de verdad es tan simple?
Creo que te han surgido un montón de preguntas, y ahora vamos a responderlas.
Pero antes, mostraremos un ejemplo de un programa completo que usa la clase Scanner:
void main()
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
3. Creación de un objeto Scanner
Primera pregunta: ¿qué es esta línea Scanner console = new Scanner(System.in);?
Una línea así puede resultar confusa, pero te encontrarás cosas parecidas constantemente. Así que creo que ha llegado el momento de explicar qué hay escrito aquí.
Recordemos cómo solemos crear una variable de texto:
String str = "texto";
Primero escribimos el tipo de la variable (String), luego su nombre (str) y, por último, después del signo igual escribimos el valor.
En nuestra “extraña” línea en realidad es lo mismo:
Scanner console = new Scanner(System.in);
Todo lo que está a la izquierda del signo igual es la declaración de una variable de tipo Scanner llamada console. Podríamos llamarla, por ejemplo, s o scanner, o incluso keyboard. Entonces el código se vería así:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Creo que ahora todo ha quedado mucho más claro.
El código que está a la derecha del signo igual es un poco más complejo. Me refiero a new Scanner(System.in); Pero tampoco hay nada del otro mundo.
En ese código le decimos a la máquina Java: crea un nuevo objeto (la palabra new) de tipo Scanner y pásale como parámetro aquello de lo que el objeto recién creado Scanner tomará los datos — el objeto System.in.
Tras ejecutar toda esa línea, tendremos una variable llamada console de tipo Scanner, con la que nuestro programa podrá leer datos del teclado.
4. Llamada de métodos
En el ejemplo anterior, nuestra variable console de tipo Scanner almacenaba internamente una referencia a un objeto de tipo Scanner.
Para invocar los métodos del objeto al que apunta la variable, hay que escribir un punto después del nombre de la variable y luego el nombre del método y los parámetros. La forma general de esta instrucción es:
variable.method(parameters);
Ejemplos:
System.out.println("Hola");
System.out.println(1);
Si no planeas pasar parámetros a la función, basta con escribir paréntesis vacíos:
variable.method();
Ejemplo:
System.out.println();
5. Entrada de datos desde la consola
Introducir datos con el teclado, cuando tenemos un objeto de tipo Scanner, es muy fácil.
Para leer del teclado una cadena, necesitas la instrucción:
String str = console.nextLine();
Cuando el programa llegue a esta línea, se detendrá y esperará a que el usuario introduzca datos y pulse la tecla Enter. Después, todo lo que el usuario haya introducido se guardará en la variable str.
Para leer un número del teclado, necesitas la instrucción:
int number = console.nextInt();
Aquí todo es análogo a la instrucción anterior. Cuando el programa llegue a esa línea, se detendrá y esperará a que el usuario introduzca datos y pulse la tecla Enter. Después, todo lo introducido se convertirá en un entero y se guardará en la variable number.
Si el usuario introduce datos que no pueden convertirse a un entero, se producirá un error y el programa terminará.
Para leer un número con decimales del teclado, necesitas la instrucción:
double number = console.nextDouble();
Esta instrucción es completamente análoga a nextInt(), solo que comprueba que los datos introducidos pueden convertirse en un número double.
Ejemplo de un programa que lee dos números del teclado y muestra su suma:
void main()
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
Nota
El usuario puede introducir varios números en una misma línea, separándolos por espacios: los métodos de la clase Scanner manejarán correctamente esta situación. Sin embargo, los números solo se leerán cuando el usuario pulse Enter.
GO TO FULL VERSION