martes, 28 de enero de 2014

Primeras interacciones con el usuario en JAVA

Uno de los temas que no he tratado en este blog es el manejo de la interacción con el usuario. Antes que enfrentarnos a interfaces gráficas, es necesario aprender un par de instrucciones que nos permitirán interactuar con el usuario por medio de la consola de comandos.

¿Qué es la consola?


Una consola de comandos es una interfaz de usuario de solo texto, donde el usuario escribe comandos y el programa los procesa. Muchas aplicaciones usan este tipo de interfaces, especialmente porque no todos los entornos son necesariamente gráficos (por ejemplo en los servidores).

Una consola de comandos simplemente despliega texto y el usuario escribe texto. nada más que eso.


Bueno ¿Y qué hago?


Para poder interactuar con el usuario, necesitamos considerar las preguntas que queremos hacerle y los datos que queremos que nos provea (las entradas de nuestro programa). Por ejemplo, si queremos hacer una aplicación que suma, resta, multiplica y divide, necesitaremos las siguientes entradas:

  • La operación que se requiere
  • El primer operando
  • El segundo operando
Estas tres cosas son preguntas que le haremos al usuario. Piensen en un formulario de una página web, hay campos de texto donde uno pone la información que se requiere. Así mismo se trabajará en una aplicación de consola.

Sacando información por la pantalla


Gracias al cielo no nos toca pensar en como desplegar el texto. Java viene con un par de librerías que nos ayudarán para lograrlo y solamente necesitamos llamar un método que imprime en la pantalla una cadena de caracteres:


System.out.println("Hola");

La anterior instrucción (obviamente dentro de algún método, por ejemplo un main) debería imprimir la cadena hola seguida de un cambio de línea (o sea que lo siguiente que se escriba aparecerá más abajo). Si se quiere obviar el cambio de línea se puede invocar el método:

System.out.print("Hola sin cambio de línea");

Con estos textos se pueden hacer las preguntas necesarias al usuario, pero queda faltando como capturar lo que el usuario escribe en el teclado...

Capturando lo que el usuario escribe


Para poder capturar información del teclado, se requiere crear una variable de tipo Scanner (no profundizaré en este tipo, pero es una variable de un tipo "lector" que puede leer varias cosas, inclusive nuestro teclado). A esta variable le llamaremos un método que puede capturar lo que el usuario escribe hasta que presiona ENTER. El método que llamamos depende del tipo de dato que queremos pedir. Así, hay metodos para pedir numeros , booleanos y cadenas (no hay para pedir un solo caracter, al menos en JAVA)

Siendo así instanciaremos una variable de tipo Scanner y le daremos una referencia al teclado

Scanner teclado = new Scanner(System.in);

Y luego a esa variable le pediremos que nos dé el número que el usuario escriba. El programa se quedará esperando que el usuario lo haga

int numero = teclado.nextInt();

En este programa, la variable número quedará con el valor del entero que escribe el usuario. Así mismo hay métodos para pedir cadenas (nextLine), pedir números Double o Float (nextDouble y nextFloat) y booleanos (nextBoolean):


int numero = teclado.nextInt(); //pide entero
float flotante = teclado.nextFloat(); //pide flotante
double doble = teclado.nextDouble(); //pide un double (doble presición)
boolean b = teclado.nextBoolean(); //pide un booleano, espera que el usuario escriba "true" o "false"
String s = teclado.nextLine(); //pide una cadena de caracteres


Un ejemplo 


Con estas instrucciones podemos entonces trabajar nuestra mini calculadora.... es necesario condicionar la operación basado en lo que nuestro usuario nos dice que hagamos. El tema de condicionales se trata en el post Sobre Condicionales - Actuando en consecuencia , pero para este ejemplo basta saber que la instrucción if nos permite seleccionar la operación correcta dependiendo del operador que el usuario nos dió.

import java.util.Scanner;


public class CalculadoraBasica
{

 /**
  * @param args
  * @param
  * @return
  * Description
  */
 public static void main(String[] args)
 {
  //Crear una variable de tipo Scanner que nos permita pedir al usuario lo que necesitamos
  Scanner teclado = new Scanner(System.in);
  //Preguntar al usuario una a una las entradas que requerimos
  //operador
  System.out.println("Por favor escriba el operador(+,-,*,/)");
  String operador = teclado.nextLine();
  //operando 1
  System.out.println("Por favor escriba el primer operando");
  double operando1 = teclado.nextDouble();
  //operando 2
  System.out.println("Por favor escriba el segundo operando");
  double operando2 = teclado.nextDouble();
  
  //ahora podemos ejecutar la operación seleccionada. utilizaremos un condicional 
  //para seleccionar la operacion y una variable double para almacenar la respuesta
  double respuesta = 0;
  if(operador.equals("+"))
  {
   respuesta = operando1 + operando2;
  }
  else if(operador.equals("-"))
  {
   respuesta = operando1 - operando2;
  }
  else if(operador.equals("*"))
  {
   respuesta = operando1 * operando2;
  }
  else if(operador.equals("/"))
  {
   respuesta = operando1 / operando2;
  }
  
  //por ultimo podemos mostrar al usuario la respuesta
  
  System.out.println(operando1+" "+operador+" "+operando2+" = "+respuesta);
 }

}

Espero que esta entrada les sea util :)...Con esto podremos hacer aplicaciones sencillas que interactuen con el usuario mediante textos.