Inputs por Consola - ScannerUn sistema o programa normalmente posee una entrada un proceso y una salida. Hasta ahora solo hemos generado salidas mediante un proceso (ya sea creando variables o simplemente imprimiendo por consola) pero no hemos interactuado en ningún momento con el usuario.
Una forma de interactuar con el usuario es que este entregue parámetros de entrada, los cuales pueden ser ingresados por la consola de comandos mientras está ejecutándose nuestro programa. Existen muchas formas de hacer esto, pero en este tutorial utilizaremos la clase Scanner.
Scanner es una clase (modelo) que posee los métodos (funciones) que nos permiten ingresar datos de entrada a nuestro programa. En este caso utilizaremos un conjunto de métodos que nos permitirán ingresar datos por teclado.
Importación, Declaración e Inicialización de ScannerPrimero: Como te indique en el tutorial “Introducción a Java y la Programación Orientada a Objetos(POO)” Una clase es un modelo/plantilla que nos permite generar objetos. Nosotros no podremos acceder a las funcionalidades de Scanner sin previamente crear un objeto Scanner a partir de su clase. Esto puede que te suene a chino, y no te preocupes, a mí me sonó a latín cuando lo hice por primera vez. En siguientes tutoriales explicare de mejor forma que es una clase y objeto, pero por ahora solo escribe lo siguiente:
Scanner scanner
= new Scanner
(System.
in);
Te explicare brevemente de que trata todo esto, no te preocupes si no lo entiendes ya que en tutoriales futuros lo explicare todo más detalladamente:
Lo que estamos haciendo es crear una variable de tipo Scanner que la llamamos coincidentemente scanner (aunque podría haberle puesto cualquier nombre), esto es exactamente lo mismo que hacemos cuando creamos cualquier tipo de variable:
Scanner scanner; // Esto es lo mismo
(Recuerda que el nombre de la variable podría ser cualquiera, en este caso la llamamos scanner)Luego en la misma línea inicialice la variable scanner entregándole como valor un objeto Scanner que recibe como parámetro de entrada “System.in”:
Scanner scanner
= new Scanner
(System.
in);// Declaro scanner = Inicializo scanner
¿Recuerdas el primer tutorial donde te hablé de la clase y objeto perro y te dije que recibía como parámetro de entrada un nombre, color y sexo? Pues esto es lo mismo: Tenemos clase Scanner y recibe como parámetro “System.in”.
Seguramente te habrás dado cuenta que tu programa tira error:
“Cannot find symbol: class Scanner” Esto ocurre porque Java no sabe dónde buscar la clase Scanner para poder utilizarla. Para solucionar esto tienes que importar al clase Scanner escribiendo justo debajo de “package nombre.proyecto” lo siguiente:
import java.util.Scanner;
Dando como resultado el siguiente código:
package tutorial.pkg9;
import java.util.Scanner;
public class Tutorial9 {
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in); }
}
Recuerda que todo aquello que este entre /* */ o después de // puedes borrarlo.Entonces lo que hicimos fue:
1. Importar java.util.Scanner para hacer uso de la clase Scanner.
2. Declarar la variable scanner de tipo Scanner.
3. Inicializar la variable scanner creando un objeto de tipo Scanner.
Si en este puto puedes ejecutar tu programa y no pasa ningún error (ósea, no pasa nada de nada) tu programa está bien. Si no lo puedes hacer intenta buscar tu error y en caso de no encontrarlo puedes preguntarme por mensaje privado o mejor, escribir un tema con tu pregunta y tanto yo como otros compañeros estaremos felices de ayudarte.
Métodos de ScannerYa tenemos nuestro objeto de Scanner inicializado y funcionando, ahora toca utilizarlo para asignar un valor a una variable. Para esto disponemos de muchos métodos (funcionalidades) distintos, los cuales puedes buscar con más detalle en la API de Java. Pero en este tutorial abordaremos 3:
scanner.nextInt(); // Para numeros enteros int
scanner.nextFloat(); // Para numeros decimales float
scanner.nextLine(); // Para palabras (String)
(todos los métodos/funciones han de finalizar con paréntesis)PRIMER EJEMPLOComo primera prueba utilizaremos scanner para pedirle dos números enteros al usuario los cuales posteriormente sumaremos:
Scanner scanner
= new Scanner
(System.
in);int a;
int b;
a = scanner.nextInt();
b = scanner.nextInt();
Lo que acabamos de hacer fue declarar dos variables numéricas llamadas “a” y “b” luego las inicializamos haciendo uso del método nextInt() y posterior a esto imprimimos la suma de a y b.
(Para utilizar el método de un objeto tienes que poner el nombre de la variable, luego un “.” (sin las comillas) y posteriormente el método) (recuerda que los métodos finalizan con un paréntesis.)Si ejecutamos el programa veras que tan solo al empezar se quedara parado. Esto es porque el programa estará en espera a que ingreses un valor numérico y posterior a esto presiones enter. Esto sucederá dos veces debido a que utilizamos scanner.nextInt() dos veces.
Si lo hiciste correctamente al ingresar dos números veras el resultado de la suma de estos y posteriormente el programa finalizara.
(Recuerda ingresar solo números o el programa podrá lanzar error)Ahora modificaremos nuestro programa para que sea más intuitivo agregando un mensaje justo antes de cada número solicitando que ingresen un valor:
package tutorial.pkg9;
import java.util.Scanner;
public class Tutorial9 {
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in); int a;
int b;
System.
out.
print("Ingresa el primer numero: "); a = scanner.nextInt();
System.
out.
print("Ingresa el segundo numero: "); b = scanner.nextInt();
}
}
(Hice uso de system.out.print para que el número se ingresara en la misma línea)SEGUNDO EJEMPLOPara el segundo ejemplo borraremos todo lo que está debajo de la inicialización de Scanner y haremos lo siguiente:
Scanner scanner
= new Scanner
(System.
in);System.
out.
print("Ingresa tu nombre: "); String nombre
= scanner.
nextLine(); System.
out.
print("Ingresa tu edad: "); int edad = scanner.nextInt();
System.
out.
print("Ingresa tu estatura: "); float estatura = scanner.nextFloat();
System.
out.
println("Tu nombre es: " + nombre
); System.
out.
println("Tu edad es: " + edad
); System.
out.
println("Tu estatura es: " + estatura
);
Ahora analicemos lo que acabamos de hacer en orden:
1. Declaramos e inicializamos scanner
2. Solicitamos el nombre del usuario
3. Declaramos la variable nombre de tipo String y utilizamos el método nextLine para que el usuario ingresara un String (su nombre).
4. Solicitamos la edad del usuario
5. Declaramos la variable edad de tipo int y utilizamos el método nextInt para que el usuario ingresara un numero entero (su edad)
6. Solicitamos la estatura del usuario
7. Inicializamos la variable estatura de tipo float y le asigamos con el método nextFloat un valor decimal (su estatura). // Este ha de introducirse con una “,” como separador decimal
8. Finalizamos imprimiendo todos los valores ingresados por el usuario.
En este ejemplo hicimos uso de tres métodos de Scanner y los utilizamos para solicitar al usuario ingresar valores desde el teclado.
NOTAS IMPORTANTESA modo de recordatorio te pongo la siguiente lista:
1. Para utilizar Scanner tienes que importar Scanner.
2. Para utilizar Scanner tienes que crear un objeto a partir de la clase Scanner.
3. Scanner dispone de distintos métodos que puedes utilizar para ingresar datos por teclado.
OTRAS OBSERVACIONESAlgunas observaciones sobre Scanner:
1. Puedes ingresar valores no String separados por un espacio sin necesidad de apretar enter.
2. Puedes inicializar una variable directamente haciendo uso de Scanner
ERROR DE SCANNERScanner posee un “bug” que sucede al realizar lo siguiente:
scanner.nextInt();
System.
out.
print("Otro String: "); scanner.nextLine();
scanner.nextLine();
Si ejecutas el código anterior te darás cuenta que este finaliza apenas ingreses el primer número. Esto es debido a que nextLine() toma por valor el “Enter” que ingresas apenas terminas de ingresar el número. Una forma de solucionarlo es agregando un nextLine antes del nextLine real:
scanner.nextInt();
System.
out.
print("Otro String: "); scanner.nextLine();
scanner.nextLine();
Eso es todo por ahora. En un futuro te explicare otra forma de ingresar datos por teclados sin necesidad de Scanner pero por ahora esta es la mejor opción (y en particular me gusta mucho Scanner por su simpleza). Nos vemos en el siguiente tutorial.
RECURSOS ASOCIADOS A ESTE TUTORIAL:- Video Tutorial – Concatenación
- Tutorial descargable .DOCX
RECURSOS COMPLEMENTARIOS:No existen recursos complementarios para este artículo.