1. Lectura desde la consola usandoSystem.in
En las lecciones anteriores, nos familiarizamos con los comandos para mostrar información en la pantalla. Para ello, hemos utilizado el System.outobjeto y sus print()métodos println(). Es simple y conveniente.
Pero, como ya habrás adivinado, mostrar información en pantalla no es suficiente para nosotros. El propósito de la mayoría de los programas es hacer algo útil para el usuario. Eso significa que muy a menudo es necesario que el usuario pueda ingresar datos desde el teclado.
Al igual que en el caso de la salida, también tenemos un objeto especial para la entrada de datos: System.in. Pero, por desgracia para nosotros, no es tan cómodo como nos gustaría. Nos permite leer datos del teclado un carácter a la vez.
Para mejorar esto, usaremos otra clase que, cuando se empareja con el System.inobjeto, nos dará todo lo que necesitamos. Desde hace mucho tiempo, Java ha tenido clases para adaptarse a cada ocasión. Y conoceremos a uno de ellos ahora.
2. Scannerclase
La Scannerclase (nombre completo: java.util.Scanner) puede leer datos de diferentes fuentes, por ejemplo, la consola, archivos e Internet. Si queremos que lea datos del teclado, debemos pasar el System.inobjeto como un argumento que servirá como fuente de datos. Y luego el objeto Scanner descubrirá qué hacer con él.
Leer desde el teclado usando un Scannerobjeto se vería así:
| Código | Explicación |
|---|---|
|
Creamos un Scannerobjeto. Leemos una línea de texto desde el teclado. Leemos un número del teclado. |
Parece fácil, pero ¿realmente es así de simple?
Creo que debe tener un montón de preguntas, y ahora las responderemos.
Pero primero, demostremos un ejemplo de un programa completo que usa la Scannerclase:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
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. Crear un Scannerobjeto
La primera pregunta es ¿qué es esta línea Scanner console = new Scanner (System.in);?
Esta línea puede ser confusa, pero verá cosas similares todo el tiempo. Así que creemos que es importante explicar lo que está pasando aquí.
Recuerde cómo solemos crear una variable con texto:
String str = "text";
Primero escribimos el tipo de variable ( String), luego su nombre ( str), y finalmente, después del signo igual, escribimos el valor.
Nuestra línea desconcertante es en realidad la misma:
Scanner console = new Scanner(System.in);
Scannervariable
Todo lo que queda a la izquierda del signo igual es la declaración de una variable llamada consolecuyo tipo es Scanner. En su lugar, podría llamarlo s o scannero incluso keyboard. Entonces el código quedarí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 eso deja todo mucho más claro.
Pero el código a la derecha del signo igual es un poco más complicado. Ahora me refiero a new Scanner(System.in); Dicho esto, aquí tampoco sucede nada sobrenatural.
En este código, le decimos a la máquina Java: cree un nuevo objeto (la newpalabra clave) cuyo tipo sea Scanner , pasando el System.inobjeto como fuente de datos para el Scannerobjeto recién creado.
Después de ejecutar toda esta línea, tendremos una Scannervariable con nombre console que nuestro programa usará para leer datos del teclado.
4. Lista de métodos
En el ejemplo anterior, nuestra Scanner consolevariable almacena una referencia a un Scannerobjeto.
Para llamar a métodos en un objeto al que hace referencia una variable, escribe un punto después del nombre de la variable, seguido del nombre del método y cualquier argumento. La apariencia general del comando es la siguiente:
variable.method(arguments);
Ejemplos:
System.out.println("Hello");
System.out.println(1);
Si no planea pasar argumentos a una función, simplemente escriba paréntesis vacíos:
variable.method();
Ejemplo:
System.out.println();
5. Entrada de consola
Cuando tenemos un Scannerobjeto, es fácil obtener datos del teclado.
Para leer una línea desde el teclado , necesita este comando:
String str = console.nextLine();
Cuando la ejecución del programa llegue a esta línea, se detendrá y esperará a que el usuario ingrese los datos y presione enter. Luego, todo lo que el usuario ingresó se almacena en la variable str.
Para leer un número desde el teclado , necesita este comando:
int number = console.nextInt();
Todo aquí es como el comando anterior. Cuando la ejecución del programa llegue a esta línea, se detendrá y esperará a que el usuario ingrese los datos y presione enter. Después de eso, todo lo que el usuario ingresó se convierte en un número y se almacena en la numbervariable.
Si el usuario ingresó datos que no se pueden convertir a un número entero, el programa generará un error y saldrá.
Para leer un número fraccionario desde el teclado , necesita este comando:
double number = console.nextDouble();
Esta declaración es muy similar a la del nextInt()método, solo que verifica que los datos ingresados se puedan convertir a un doublenúmero.
Ejemplo de un programa que lee dos números del teclado y muestra su suma en la pantalla:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
}
El usuario puede ingresar varios números en una sola línea, separándolos con espacios: los métodos de la Scannerclase saben cómo manejar esto. Dicho esto, el programa lee los números solo después de que el usuario presiona Enter.
6. Otros métodos de la Scannerclase
Por cierto, los métodos anteriores no son todo lo que la Scannerclase tiene para ofrecer. La lista completa de métodos se parece a esto:
| Método | Descripción |
|---|---|
|
Lee datos y los convierte en unbyte |
|
Lee datos y los convierte en unshort |
|
Lee datos y los convierte en unint |
|
Lee datos y los convierte en unlong |
|
Lee datos y los convierte en unfloat |
|
Lee datos y los convierte en undouble |
|
Lee datos y los convierte en unboolean |
|
Lee una "ficha". Los tokens están separados por espacios o presiones de la tecla enter |
|
Lee una línea completa |
También hay métodos que le permiten verificar el siguiente token en la entrada sin realmente buscarlo (para saber qué método usar para leerlo).
| Método | Descripción |
|---|---|
|
¿Hay un byte? ¿Se puede convertir la entrada a un byte? |
|
¿Hay un short? ¿Se puede convertir la entrada a un short? |
|
¿Hay un int? ¿Se puede convertir la entrada a un int? |
|
¿Hay un long? ¿Se puede convertir la entrada a un long? |
|
¿Hay un float? ¿Se puede convertir la entrada a un float? |
|
¿Hay un double? ¿Se puede convertir la entrada a un double? |
|
¿Hay un boolean? ¿Se puede convertir la entrada a un boolean? |
|
¿Hay otra ficha? |
|
¿Hay otra línea? |
7. Lectura de datos de una cadena
Anteriormente mencionamos que la Scannerclase puede leer datos de varias fuentes. Una de esas fuentes es una cadena de texto .
Se ve algo como esto:
String str = "text";
Scanner scanner = new Scanner(str);
Al crear el Scannerobjeto, pasamos la cadena stren lugar del System.inobjeto. Y ahora el scannerobjeto leerá datos de la cadena. Ejemplo:
| Código de programa: | Explicación: |
|---|---|
|
// un == 10;
// b == 20;
La salida de pantalla será: |
GO TO FULL VERSION