Programando una calculadora en Java utilizando tipos primitivos.

Por descargarpseint / hace 6 meses / 0 Comentarios ».

Hoy voy a enseñarte a programar una calculadora en java utilizando los tipos primitivos del lenguaje. Mientras avancemos en la construcción de la calculadora iremos introduciendo algunos elementos básicos de java y también podrás comprobar algunos inconvenientes y limitaciones en las soluciones ofrecidas por estos tipos básicos. Tanto si eres nuevo en el mundo de la programación como si vienes de otros lenguajes, esta primera versión de la calculadora te servirá para adentrarte en algunos elementos básicos del lenguaje de programación java.

Construyendo una calculadora que opera con enteros.

Lo primero que vamos a hacer es implementar una versión de la calculadora que sea capaz de realizar operaciones con números enteros. Dentro del lenguaje java, existe un tipo primitivo encargado de representar enteros. Este tipo es int y a continuación te muestro el código necesario para construir esta solución.

package com.programarenjava.calculadora.primitivos;

public class CalculadoraApp {

        /**

         * @param args

         */

        public static void main(String[] args) {

               int numeroDiez = 10;

               int numeroSiete = 7;

               Calculadora calculadora = new Calculadora();

               int suma = calculadora.sumar(numeroDiez, numeroSiete);

               int resta = calculadora.restar(numeroDiez, numeroSiete);

               int multiplicacion = calculadora.multiplicar(numeroDiez, numeroSiete);

               int division = calculadora.dividir(numeroDiez, numeroSiete);

               System.out.println(numeroDiez+" + "+numeroSiete+" = "+suma);

               System.out.println(numeroDiez+" - "+numeroSiete+" = "+resta);

               System.out.println(numeroDiez+" * "+numeroSiete+" = "+multiplicacion);

               System.out.println(numeroDiez+" / "+numeroSiete+" = "+division);

        }

}

En el código de arriba puedes ver una clase principal (com.programarenjava.calculadora.primitivos.CalculadoraApp) donde hemos definido una calculadora y dos enteros con lo que vamos a operar. En las siguientes 4 líneas realizamos las 4 operaciones básicas con enteros que se puedan realizar con números enteros (suma, resta, multiplicación y división). Finalmente, mostramos el resultado formateado por la salida estándar.

10 + 7 = 17

10 - 7 = 3

10 * 7 = 70

10 / 7 = 1

Como ya hemos comentado antes hemos utilizado el tipo primitivo int para definir tanto los operandos de la calculadora como el resultado de cada una de las operaciones que implementa. Sin embargo, hemos definido un nuevo tipo, es decir, una clase responsable de realizar los cálculos de nuestra calculadora. A continuación puedes ver el cuerpo de la misma.

package com.programarenjava.calculadora.primitivos;

public class Calculadora {

        public int sumar(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno + numeroDos;

        }

        public int restar(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno-numeroDos;

        }

        public int multiplicar(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno*numeroDos;

        }

        public int dividir(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno/numeroDos;

        }

}

La clase com.programarenjava.calculadora.primitivos.Calculadora está compuesta de los siguientes métodos:

  • sumar:Método que utiliza el operador + para realizar la suma entera de dos números enteros.
  • restar:Método que utiliza el operador – para realizar la resta entera de dos números enteros.
  • multiplicar:Método que utiliza el operador * para realizar la multiplicación entera de dos números enteros.
  • dividir:Método que utiliza el operador / para realizar la división entera de dos números. Por esta razón los decimales resultado de dividir 10 entre 7 se pierden y no aparecen en el resultado.

La solución que acabas de ver tiene algunas ventajas importantes como su sencillez de programación y también su similitud con otros lenguajes ya que tanto los operadores (+,-,+,/) como el tipo int son comunes a otros lenguajes de programación como c. Sin embargo, tiene algunas limitaciones muy importantes que te comento seguidamente.

Limitaciones de una calculadora programada con el tipo primitivo int.

  • Solo podemos implementar operaciones que tienen sentido dentro del ámbito de los enteros de 32 bits. La división nos ofrece un resultado parcial descartando la parte decimal.
  • No podemos añadir operaciones habituales en una calculadora como la raíz cuadrada o la potencia e-nesima.
  • Si utilizamos números muy grandes podemos obtener un resultado indeterminado (dentro del rango de los enteros).

¿Qué ocurre si sumamos dos números muy grandes?.

Hasta ahora hemos visto un ejemplo donde ambos números estaban dentro del ámbito de acción. Sin embargo, en la programación siempre tenemos que buscar el extremo para comprobar la solidez de la solución que estamos desarrollando. Para mostrarte la poca flexibilidad de nuestra calculadora te propongo que realices un cambio pequeño en la clase principal CalculadoraApp.

int numeroGrande = 2147483647;

int numeroSiete = 7;

Como puedes ver el primero de los números tiene un valor muy grande, en concreto, numeroGrande tiene el valor positivo mas alto que puede tener una variable de tipo int. Si ejecutamos nuevamente el programa podemos ver un resultado absurdo para la operación sumar.

2147483647 + 7 = -2147483642

2147483647 - 7 = 2147483640

2147483647 * 7 = 2147483641

2147483647 / 7 = 306783378

La suma de dos números positivos es negativa. ¿Cómo es esto posible?. La razón es que se ha producido un desbordamiento en el rango. Como dijimos antes, el número 2147483647 es el valor máximo que puede tener un entero de 32 bits. Entonces, si a este número le sumamos 7 el resultado es un número que no cabe dentro de una variable entera. ¿Cómo podemos resolver esta anomalía?.

Utilizando el tipo primitivo long en lugar de int.

La solución a este problema consiste en ampliar el rango de valores válidos. Para ello java nos ofrece un tipo de entero largo (números de 64 bits, en lugar de 32 bits) con el que podremos trabajar con números muy grandes (de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807). A continuación te muestro los cambios necesarios para poder sumar números grandes.

long numeroGrande = 2147483647;

long numeroSiete = 7;

Calculadora calculadora = new Calculadora();

long suma = calculadora.sumar(numeroGrande, numeroSiete);

long resta = calculadora.restar(numeroGrande, numeroSiete);

long multiplicacion = calculadora.multiplicar(numeroGrande, numeroSiete);

long division = calculadora.dividir(numeroGrande, numeroSiete);

Estos son los cambios que vas a tener que realizar en la clase principal CalculadoraApp. Al hacerlo aparecerán errores en rojo si estás utilizando un IDE como eclipse y lo que te están indicando estos mensajes de error es que los tipos int y long no son compatibles. La solución a este problema consiste en crear nuevos métodos en la clase Calculadora que sean capaces de trabajar con números de tipo long.

package com.programarenjava.calculadora.primitivos;

public class Calculadora {

        public int sumar(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno + numeroDos;

        }

        public long sumar(long numeroUno, long numeroDos){

               return numeroUno + numeroDos;

        }

        public int restar(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno-numeroDos;

        }

        public long restar(long numeroUno, long numeroDos){

               return numeroUno-numeroDos;

        }

        public int multiplicar(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno*numeroDos;

        }

        public long multiplicar(long numeroUno, long numeroDos){

               return numeroUno*numeroDos;

        }

        public int dividir(int numeroUno, int numeroDos) {

               // TODO Auto-generated method stub

               return numeroUno/numeroDos;

        }

        public long dividir(long numeroUno, long numeroDos){

               return numeroUno/numeroDos;

        }

}

Como puedes ver en el código de arriba hemos creado 4 nuevos métodos que realizan las operaciones básicas (+,-,*,/) cuyo nombre coincide con las operaciones para enteros, sin embargo, tanto los parámetros como el resultado es de tipo long. Esta forma de definir métodos dentro de una clase se llama sobrecarga de métodos. En este caso hemos sobrecargado los métodos: sumar, restar, dividir y multiplicar.

Con ello hemos conseguido solucionar la limitación de no poder utilizar números muy grandes, sin embargo, seguimos sin poder implementar la operación dividir en todo su ámbito y tampoco podemos crear nuevas operaciones como la potencia o la raíz debido a que nuestra calculadora no es capaz de trabajar con reales. ¿Qué podemos hacer?.

Te propongo como ejercicio que, siguiendo la estrategia de sobrecargar los métodossumar, restar, dividir y multiplicar, añadas a la calculadora la capacidad de operar con reales. Para ello java nos ofrece dos tipos primitivos (float y double), los cuales son capaces de almacenar números de coma flotante de 32 y 64 bits.

Conclusiones de programar la calculadora en java utilizando tipos primitivos.

  1. Los tipos primitivos son fáciles de utilizar, sin embargo, son poco flexibles ya que la conversión entre ellos no es directa.
  2. La sobrecarga de métodos es la única forma de añadir potencia a la calculadora. Esto supone añadir métodos nuevos a la clase Calculadoraincrementado así su complejidad.
  3. Como hemos visto la poca flexibilidad de estos tipos básicos hace imposible realizar una operación entre un entero y un real como parámetros. (6+50,60).

Hasta aquí esta primera experiencia de programación con la Calculadora de Java. Mientras escribía este artículo iba cobrando fuerza en mi cabeza la idea de aprovechar este ejemplo para preparar un manual mucho mas extenso. Cuando digo extenso me refiero a tratar un mayor número de temas relacionados con java y además quiero ofrecerte un conjunto de consejos y buenas prácticas que he ido aprendiendo con los años de experiencia. Aquí te dejo la presentación del tutorial Programando una Calculadora en Java.

Espero que la información contenida en este artículo te haya sido de utilidad. Si así lo crees te agradecería que compartieras esta información entre aquellos amigos/compañeros de trabajo a quienes pienses que les pueda ayudar. Si deseas seguir el curso a través de tu lector RSS puedes suscribirte desde aquí. Si tu eres mas de leer el correo electrónico entonces puedes apuntarte al Newsletter de Programar en Java. Por ultimo, si tienes alguna duda, siempre puedes dejar tu comentario aquí o ponerte en contacto conmigo.

Ver: Descargar Pseint

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *