noviembre 18, 2011

Tu primer menú en JAVA y Calculador de Áreas

Hace tiempo (el 30/07/11) en el post Calcular Áreas con Datos Preestablecidos explicamos programas muy sencillos que calculaban el área de varias figuras, un programa para calcular el área de una figura. En esta ocasion con el uso de switch les mostrare como hacer un programa que calcule el area de cualquier figura, así el mismo programa podrá calcular el área de un rombo circulo, rectángulo, triangulo, trapecio; Para lo anterior crearemos un sencillo menú en el cual el usuario pueda elegir la figura de la que desea calcular su área. Posteriormente a que el usuario haya elegido la figura, nuestro programa pedirá al usuario los datos necesarios para calcular el área de la figura elegida. En java esto es así:
//Archivo: Areas.java

import javax.swing.JOptionPane;

public class Areas{

 public static void main(String args[]){
 
  String valor=JOptionPane.showInputDialog("Elija el numero de la figura\n1.-Circulo\n2.-Rectangulo\n3.-Triangulo\n4.-Trapecio");
  int opcion=Integer.parseInt(valor);
  
  switch(opcion){
  
   case 1:{
    valor=JOptionPane.showInputDialog("Radio");
    double radio=Double.parseDouble(valor);
    double area=3.1416*(radio*radio);
    System.out.println("El area es: "+area);
   }
   break;
   
   case 2:{
    valor=JOptionPane.showInputDialog("Base");
    double base=Double.parseDouble(valor);
    valor=JOptionPane.showInputDialog("Altura");
    double altura=Double.parseDouble(valor);
    double area=base*altura;
    System.out.println("El area es: "+area);
   }
   break;
   
   case 3:{
    valor=JOptionPane.showInputDialog("Base");
    double base=Double.parseDouble(valor);
    valor=JOptionPane.showInputDialog("Altura");
    double altura=Double.parseDouble(valor);
    double area=(base*altura)/2;
    System.out.println("El area es: "+area);
   }
   break;
   
   case 4:{
    valor=JOptionPane.showInputDialog("Base mayor");
    double base1=Double.parseDouble(valor);
    valor=JOptionPane.showInputDialog("Base menor");
    double base2=Double.parseDouble(valor);
    valor=JOptionPane.showInputDialog("Altura");
    double altura=Double.parseDouble(valor);
    double area=(base1+base2)*altura/2;
    System.out.println("El area es: "+area);
   }
   break;
   
   default:
    System.out.println("Opcion no validad");
  }
 }
}
Este programa realmente es muy sencillo, solo que tiene un toque de "diferencia" debido al ingenio que se utiliza al manejar el JOptionPane. Realmente el JOptionPane es nuestro menú, en la linea 10 declaramos String valor y le asignamos la respuesta que obtengamos del JOptionPane, pero en esta ocasión, el mensaje que el JOptionPane le mostrara al usuario sera un poco largo ya que ahí construimos nuestro menú, y damos indicaciones al usuario sobre las opciones que tiene para elegir. Le decimos que si quiere calcular el área de un circulo ingrese el numero 1, si quiere la de un rectángulo el numero 2, para calcular el área de un triangulo que ingrese el numero 3 y que ingrese 4 para la del trapecio.

El usuario estará ingresando una cadena de caracteres que contendrá a un numero del 1 al 4, en la linea 10 convertimos ese numero a un formato int, para meterlo dentro de un switch y utilizar los case como complemento de nuestro menú. Cada case del switch estará destinado a resolver el calculo del área de una figura y esto sera en función a como hayamos acomodado nuestro menú. Como en nuestro menú le indicamos al usuario que ingrese 1 para Circulo, 2 para Rectangular, 3 para Triangulo y 4 para Trapecio, entonces el case1 calculara el área del circulo, el case2 el área del rectángulo, el case 3 el área del triangulo y para el case 4 el área del trapecio.

Una vez analizado nuestro menú, solo empezamos a trabajar en cada case. Y para cada case pediremos al usuario lo datos que necesitemos para calcular el área de la figura elegida. Las formulas en código java para determinar el área de estas figuras, ya las estudiamos en el post mencionado al inicio, solo hay que retomarla e implementarla para este programa. Nótese que en este programa el muy común la variable valor (de tipo String), esta variable es utilizada numerosas veces en este programa, y es valido, porque como ya mencionamos en posts anteriores, las variables pueden ser reutilizadas, solo que debemos cuidar de no confundirnos por el valor que contenga, el valor que va a contener esta variable, se va a estar actualizando (cambiando) cada vez que la ocupemos para asignarle un valor nuevo.

case1, para el circulo:
Se calcula: π*r²
En este caso solo necesitamos pedir el valor del radio del circulo al usuario, ya que pi es un valor constante. En la linea 15 pedimos el radio al usuario y en la linea 16 declaramos double radio y le asignamos lo que resulte de la conversión de la variable valor a un formato double y en la linea 17 declaramos double area a la que se le asignara lo que resulte de la operacion: radio * radio para obtener el r² y después se multiplica por 3.1416 (pi), para obtener el área. En la linea 18 imprimimos el resultado.

case2, para el rectangulo:
Se calcula: b*h
Para calcular esta área sera necesario que pidamos 2 datos al usuario, la base y la altura. En la linea 23 nuevamente hacemos uso de la variable valor para pedir la altura al usuario mediante le JOptionPane, inmediatamente en la linea 24 convertimos lo que contiene valor a un formato double y se lo asignamos a double base. En la linea 25 reutilizamos la variable valor y pedimos la altura al usuario y posteriormente en la linea 26 convertimos el lo que ahora contiene valor a un formato double y se lo a signamos a double altura. Ahora en la linea 27 solo declaramos double area y le asignamos de lo que resulte de multiplicar a nuestras variable base y altura. En la linea 28 mostramos el resultado.

case3, para el triangulo:
Se calcula: (b*h)/2
Para este caso también tenemos que pedir 2 datos al usuario, la base y la altura, así que se usa el mismo procedimiento como lo hicimos con el rectángulo para obtener los datos; Una vez que ya hayamos obtenido los datos y lo hayamos convertido al formato adecuado (double), declaramos double área y le asignamos de lo que resulte de: multiplicar base por altura y que su resultado se divida entre 2. Y al final de ese case se imprime el resultado del calculo.

case4, para el trapecio:
Se calcula: (BaseMayor + basemenor)*h/2
Analizando la ecuación sabemos que tenemos que pedir 3 datos al usuario: la base mayor, base menor y altura. Usamos los mismos procedimientos anteriores para pedir los datos al usuario y convertirlos a double, una vez hecho lo anterior, declaramos double area y le asignamos lo que resulte de la suma de base1+base2 multiplicado por altura y el resultado de esto dividido entre 2. En la siguiente linea se imprime el resultado.

A este programa se le pueden añadir mas funciones, complementarlo y mejorarlo; por ejemplo se le puede agregar mas opciones al menu para el calculo de algunas otras figuras, también se le puede implementar un try{ } catch{ } para hacerlo contra errores; Pero lo dejamos aquí para que ustedes experimenten con el.



IMPORTANTE

String valor
Como ya mencionamos es valido reutilizar esta variable para toda ocasión que la necesitemos. Las variables solo se declaran una vez, sin importar su tipo, y después, cuando se utilizan solo se escribe el nombre de la variable (ya no se escribe el tipo de variable porque eso es solo cuando se declara) y se le asigna el valor que se le vaya a asignar o se le ocupa para realizar alguna operación. Es por eso que siempre que utilizábamos la variable valor solo se escribía su nombre. Y fue valido utilizar esta variable para todo el programa (todos los cases) ya que esta declarada en el main.

double area
Como pudimos darnos cuenta, esta variable fue declarada mas de una vez,y con esto contradecimos lo anterior, pero esto ocurrió debido a que cada vez que se declaraba esta variable se hacia dentro de un case, y cuando una variable se declara dentro de un case, un switch, un for, while, if, etc., esa variable solo funciona o solo existe para esa instrucción, a estas se les llama variables de instancia.

Por lo que cuando declaramos double area en el case 1 para calcular el área del circulo, existe y es valida y ahí almacenara el resultado, pero solo existe para tal caso (para todos los demás, no), de tal manera que si queremos volver a declara double area dentro de ese caso (osea declararla 2 veces: double area; double area;) nos botara un error. Fuera del case 1, la variable double area no existe, sera como si jamas la hubiésemos escrito antes, por eso es posible volver a declarar esa misma variable pero para un case diferente.

2 comentarios:

  1. como lo hago para validar los valores, quiero decir, para que solo sean numeros positivos.
    Saludos

    ResponderBorrar
  2. hola :) como le ago para preguntar antes que figura deceo calcular?

    porfavor ayudame
    saludos

    ResponderBorrar