Java desde Cero – Entrada y Salida de Datos – Formato de Resultados

Cuando queremos sacar información hacia la consola es común hacer uso de la instrucción:

System.out.println("Lo que queremos que salga");

Sin embargo, si deseamos ingresar datos a través de la consola hacia nuestra aplicación debemos de usar la clase Scanner el cual pertenece al paquete java.util. La clase Scanner posee tres métodos importantes: nextLine, nextInt, nextDouble (en la API puedes encontrar muchos más; sin embargo, podría decirse que estos son los más usados); otra alternativa sencilla es usar la clase JOptionPane y su método showInputDialog (este método es estático, lo cual básicamente indica que el nombre de la clase siempre debe ir por delante de la llamada al método y se verá más adelante). Si deseamos hacer uso de la clase Scanner debemos de importar el paquete útil; sin embargo, existen 2 formas en que podemos realizar esto, podemos importar todo el paquete dentro de los cuales se encuentra la clase Scanner o simplemente importar la clase, yo recomendaría que para un uso más eficiente se importe lo estrictamente necesario aun cuando en nuestros tiempos los espacios en memoria son lo suficientemente grandes, esto obedece más a una cuestión de eficiencia y buena práctica que a la funcionalidad ya que ambas formas funcionarán, entonces te dejo las dos formas:

import java.util.Scanner;
import java.util.*;

Hecha la importación debemos de crear una instancia de la clase, recordemos que java es un lenguaje orientado a objetos, entonces los objetos son tipos de datos referenciados lo que significa que si tenemos una clase el poder usarla requiere que se creen representaciones a las que llamamos instancias que hacen uso de las propiedades y métodos de dicha clase (sé que puede leerse un poco complicado pero a medida que avancemos podremos tener un mejor entendimiento del mismo); la clase Scanner tiene sobrecarga de constructores; es decir, que se puede crear una instancia de distintas formas en función de los parámetros que esta pueda requerir, dentro de los constructores nos interesa la forma en que podemos crear una instancia de clase que tenga como parámetro un flujo de entrada, y esto se obtiene con:

Scanner(InputStream source)

Un flujo de entrada lo obtenemos con la instrucción:

System.in

De la clase System del paquete lang (el paquete por defecto de java y que en consecuencia no requiere ser importado), el cual la entrada de flujo estándar que está abierta y lista para suministrar datos, típicamente este flujo corresponde a las entradas de teclado, entonces en nuestro código usamos:

Scanner entrada= new Scanner(System.in);

Podemos notar el uso de la palabra reservado new, la cual es parte de la sintaxis en la construcción de una instancia de una clase, es decir que siempre que hemos de crear una instancia de cualquier clase hemos de usar dicha palabra reservada.

Cuando tenemos ya la instancia creada vemos que es capaz de realizar un paro del flujo de ejecución a la espera del ingreso de un dato a través de la consola; sin embargo, el usuario no se dará por enterado sino es que se lo anunciamos,  por ejemplo:

Scanner entrada= new Scanner(System.in);
System.out.println("Ingrese un número");
int numero=entrada.nextInt();
System.out.println(numero);

Como puede observarse hemos creado la instancia de la clase y hemos impreso una solicitud que es el que el usuario ingrese un número, hasta que el usuario no presione la tecla ENTER la consola estará a la espera de la entrada de datos (a través del teclado), pero no solo basta con eso ya que por defecto nos retorna un token, debemos de hacer una conversión de ese token a un tipo de dato como una cadena, un entero o un flotante, es ahí que entran a tallar los métodos que hemos mencionado líneas arriba, en nuestro hemos convertido a un número entero a través del método nextInt (puede ser nextLine o nextDouble) lo hemos almacenado en una variable de tipo entero llamada “número”  y luego realizamos una impresión en consola; ahora veamos un ejemplo un poco más complejo:

public static void main(String[] args) {
     Scanner entrada= new Scanner(System.in);
     System.out.println("Ingresa tu nombre");
     String nombre=entrada.nextLine();
     System.out.println("Ahora ingresa tu edad por favor");
     int numero=entrada.nextInt();
     System.out.println("Tu nombre es: "+nombre+" y tu edad es de: "+numero + " años");
     entrada.close();
}  

Observamos que lo nuevo es el uso del método close, este método nos permite cerrar el flujo de entrada de datos, es decir cierra el Scanner, es propio y como buena práctica cerrar todo cuando ya hemos dejado de hacer uso de algún input, hecha esta observación debemos de obtener algo como esto:

e_s_1.png

Ahora bien las salidas pueden seguir diferentes tipos de formatos, imaginemos que tenemos una variable y queremos dividirla entre 3 e imprimir el resultado:

double x=1000.0;
System.out.println(x/3);
//resultado 333.3333333333333

Nosotros podemos dar un formato a la salida de datos, para ello debemos de usar el método printf de la clase PrintStream que se obtiene a través de la clase System y el campo out (al igual que in de entrada out de salida de flujo de datos), este método tiene sobrecarga, pero el que nos interesa es:

printf(String format,Object ... args);

Los tipos de formato los podemos obtener de Format string syntax, entonces por ejemplo si de nuestra división de x quisiéramos que solo se imprima a dos decimales debemos hacer lo siguiente:

System.out.printf("%1.2f", x/3); // resultado 333,33

Puedes experimentar con muchas de los formatos existentes, pero ello ya te lo dejo a tu criterio. Saludos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s