Introducción a la entrada: la clase Scanner
¿Os parece complicada la forma que tiene Java de imprimir un texto en
pantalla? Pues si el procedimiento de salida es complicado, no es nada
comparado con el de entrada de datos al programa por parte del usuario.
Hay que llevar a cabo nada menos que 3 pasos para poder capturar la
entrada de datos al programa:
- Importar un paquete
- Crear un objeto
- Capturar la entrada en una variable
Mejor lo vemos primero en un ejemplo y luego analizamos cada parte.
package cap02;
import java.util.Scanner;
public class Suma {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Escribe un entero: ");
int num1 = entrada.nextInt();
System.out.print("Escribe otro entero: ");
int num2 = entrada.nextInt();
int suma = num1 + num2;
System.out.println("La suma de " + num1 + " y " + num2 + " es " + suma);
}
}
Este programa simplemente pide al usuario dos números enteros y los suma, mostrando el resultado en pantalla.
Lo primero que nos puede llamar la atención es la declaración:
import java.util.Scanner;
Lo que hace es indicar al compilador de Java que vaya a buscar la clase Scanner (que vamos a utilizar luego) en el paquete Java.util.
La sentencia siguiente es importante:
Scanner entrada = new Scanner(System.in);
Estamos creando un objeto, llamado entrada, de la clase Scanner. Carecemos todavía de los conocimientos necesarios para entender esta instrucción, pero quedémonos con que a partir de ahora en la variable entrada vamos a capturar lo que el usuario escriba por teclado.
¿Os acordáis del System.out cuando mostrábamos algo en pantalla? Es el objeto de salida estándar del sistema (la pantalla). Pues el System.in es parecido, representa al objeto de entrada estándar (el teclado).
Realmente, la creación del objeto entrada en la instrucción anterior presenta la misma sintaxis que cualquier otra creación de variable:
<tipo> <nombre_variable> = <valor>;
Sin embargo, como entrada es un objeto, hay que llamar al constructor de la clase Scanner para darle unas condiciones iniciales determinadas. Todo esto lo veremos poco a poco.
Las instrucciones siguientes también tienen su miga:
System.out.print("Escribe un entero: ");
int num1 = entrada.nextInt();
Primero, mostramos en pantalla un mensaje al usuario para que sepa que le estamos pidiendo algo, concretamente un número entero. Después, almacenamos la entrada del usuario en una variable adecuada, num1, de tipo entero int. Quizás lo más extraño sea:
int num1 = entrada.nextInt();
No es más que la llamada al método nextInt(), el cual captura el dato introducido por el usuario. El programa en este momento espera a que el usuario escriba el entero y pulse Intro. Una vez hecho esto, es cuando almacena el número en num1. El objeto entrada, mediante el punto (.), accede a los métodos de la clase Scanner. Esta dispone de distintos métodos para capturar diferentes tipos de datos, siendo los siguientes los más usados:
nextInt(); Captura un entero
nextDouble(); Captura un decimal de doble precisión
nextLine(); Captura una línea completa (hasta el Intro)
next(); Captura una palabra (hasta un espacio en blanco)
El programa vuelve a repetir este mismo procedimiento para solicitar al usuario un segundo número y lo captura en una variable distinta.
Después, utiliza una nueva variable, suma, para almacenar el resultado de sumar num1 y num2. Finalmente, muestran en pantalla el valor de suma utilizando lo que se llama concatenación de cadenas y variables:
System.out.println("La suma de " + num1 + " y " + num2 + " es " + suma);
Es como si unimos con el operador + los distintos elementos que forman la construcción.
¿Podríamos haber utilizado printf() en lugar de println()? Por supuesto, incluso hubiera sido más acertado. Sería así:
System.out.printf("La suma de %d y %d es %d", num1, num2, suma);
En la próxima entrada veremos algunos conceptos importantes en relación a la memoria y a las variables.
- Importar un paquete
- Crear un objeto
- Capturar la entrada en una variable
Mejor lo vemos primero en un ejemplo y luego analizamos cada parte.
package cap02;
import java.util.Scanner;
public class Suma {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Escribe un entero: ");
int num1 = entrada.nextInt();
System.out.print("Escribe otro entero: ");
int num2 = entrada.nextInt();
int suma = num1 + num2;
System.out.println("La suma de " + num1 + " y " + num2 + " es " + suma);
}
}
Este programa simplemente pide al usuario dos números enteros y los suma, mostrando el resultado en pantalla.
Lo primero que nos puede llamar la atención es la declaración:
import java.util.Scanner;
Lo que hace es indicar al compilador de Java que vaya a buscar la clase Scanner (que vamos a utilizar luego) en el paquete Java.util.
La sentencia siguiente es importante:
Scanner entrada = new Scanner(System.in);
Estamos creando un objeto, llamado entrada, de la clase Scanner. Carecemos todavía de los conocimientos necesarios para entender esta instrucción, pero quedémonos con que a partir de ahora en la variable entrada vamos a capturar lo que el usuario escriba por teclado.
¿Os acordáis del System.out cuando mostrábamos algo en pantalla? Es el objeto de salida estándar del sistema (la pantalla). Pues el System.in es parecido, representa al objeto de entrada estándar (el teclado).
Realmente, la creación del objeto entrada en la instrucción anterior presenta la misma sintaxis que cualquier otra creación de variable:
<tipo> <nombre_variable> = <valor>;
Sin embargo, como entrada es un objeto, hay que llamar al constructor de la clase Scanner para darle unas condiciones iniciales determinadas. Todo esto lo veremos poco a poco.
Las instrucciones siguientes también tienen su miga:
System.out.print("Escribe un entero: ");
int num1 = entrada.nextInt();
Primero, mostramos en pantalla un mensaje al usuario para que sepa que le estamos pidiendo algo, concretamente un número entero. Después, almacenamos la entrada del usuario en una variable adecuada, num1, de tipo entero int. Quizás lo más extraño sea:
int num1 = entrada.nextInt();
No es más que la llamada al método nextInt(), el cual captura el dato introducido por el usuario. El programa en este momento espera a que el usuario escriba el entero y pulse Intro. Una vez hecho esto, es cuando almacena el número en num1. El objeto entrada, mediante el punto (.), accede a los métodos de la clase Scanner. Esta dispone de distintos métodos para capturar diferentes tipos de datos, siendo los siguientes los más usados:
nextInt(); Captura un entero
nextDouble(); Captura un decimal de doble precisión
nextLine(); Captura una línea completa (hasta el Intro)
next(); Captura una palabra (hasta un espacio en blanco)
El programa vuelve a repetir este mismo procedimiento para solicitar al usuario un segundo número y lo captura en una variable distinta.
Después, utiliza una nueva variable, suma, para almacenar el resultado de sumar num1 y num2. Finalmente, muestran en pantalla el valor de suma utilizando lo que se llama concatenación de cadenas y variables:
System.out.println("La suma de " + num1 + " y " + num2 + " es " + suma);
Es como si unimos con el operador + los distintos elementos que forman la construcción.
¿Podríamos haber utilizado printf() en lugar de println()? Por supuesto, incluso hubiera sido más acertado. Sería así:
System.out.printf("La suma de %d y %d es %d", num1, num2, suma);
En la próxima entrada veremos algunos conceptos importantes en relación a la memoria y a las variables.
Comentarios
Publicar un comentario