La clase Math

La clase Math, situada en el paquete java.lang, nos provee de muchísimos métodos para para realizar las funciones matemáticas de uso más común.

La clase Math se encuentra situada en el paquete java.lang, esta es la razón por la que varias veces hemos utilizado esta clase sin necesidad de importarla. Recuerda que el paquete java.langse importa de manera implícita en todas las nuevas clases que creamos.

La clase Math tiene implementados muchos métodos estáticos que resuelven distintas tareas matemáticas. Al ser métodos estáticos pueden ser utilizados sin necesidad de construir un objeto. De hecho, nunca creamos un objeto de la clase Math.

Vamos a ir descubriendo poco a poco gran parte de lo que podemos hacer con la clase Math a través de ejemplos.

Las constantes PI y E

La clase Math dispone de las propiedades PI y E, que son variables estáticas y finales, es decir, pertenecen a la clase y son constantes. Contienen los clásicos valores matemáticos de PI (utilizado entre otras cosas para calcular la longitud y área de una circunferencia) y E (número irracional que se toma como base de los logaritmos neperianos).

 

Cálculo de la potencia

Java no tiene un operador específico para el cálculo de la potencia, esta se calcula con el método pow de la clase Math, cuyo formato es:

La función pow recibe la base y el exponente y devuelve un número de tipo double con el resultado.

Veamos un ejemplo:

 

Conversión entre grados y radianes

La clase Math dispone de un par de métodos para convertir ángulos a radianes y viceversa. El formato de estos métodos el el siguiente:

Veamos un ejemplo:

Seno, coseno y tangente

Math dispone de un gran número de métodos para trabajar con ángulos. En esta ocasión trabajaremos con los métodos sen, cos y tan, que tienen el siguiente formato:

Veamos un ejemplo:

Redondeos: métodos ceil, floor y round

  • Los métodos ceil, floor y round realizan el redondeo de un número real, pero de manera distinta.
  • El método ceil realiza el redondeo al alza y deja cero en la parte decimal.
  • El método floor realiza el redondeo a la baja y deja cero en la parte decimal.
  • El método round realiza el redondeo al número más próximo y deja cero en la parte decimal. Aplica las reglas matemáticas del redondeo de números.

El formato de estos métodos es:

Observa que los métodos ceil y floor retornan un double, mientras que el método round está sobrecargado para retornar un long cuando recibe un double o retornar un int cuando recibe un float.

Veamos un ejemplo:

 

Generación de números al azar

La clase Math dispone de un método muy sencillo para generar números al azar con el siguiente formato:

La función random() devuelve un número al azar entre 0 (incluido) y 1 (sin incluir) con muchos decimales.

Prueba el siguiente código y ejecútalo muchas veces para comprobar que en cada ejecución sale un valor distinto:

A través de una serie de operaciones podemos convertir el número al azar entre 0 y 1 en un número al azar de cualquier rango. Vamos a ver algunos ejemplos:

Genera un número al azar entre 0 y 10 sin llegar a alcanzar el 10 y con decimales. Recuerda que random() genera un número entre 0 y 1 sin llegar al 1, luego el número mayor podría ser 0.999999999999999, que multiplicado por 10 será 9.99999999999999.

En este caso, al aplicar el redondeo al alza, sí que alcanzaremos el número 10. Podríamos también obtener un 0, pero es muy improbable, ya que el número al azar generado tendría que ser 0.000000000000000.

En este caso, al aplicar el redondeo a la baja, estamos obteniendo un número del 0 al 9.

En este caso, al realizar el redondeo al número más próximo, estamos generando un número del 0 al 10.

En este caso, el generar un número al azar entre 0 y 1 (sin llegar al 1) y multiplicarlo por 10, estamos obteniendo un número entre 0 y 10 (sin llegar al 10) con muchos decimales. El número mayor posible será 9.999999999999999, pero al aplicar un cash y convertirlo a int estamos eliminando los decimales, de modo que estamos generando un número entre 0 y 9 sin decimales.

Ahora estamos generando un número al azar entre 1 y 10.

En el caso de que desees generar números enteros al azar con cualquier rango DESDE … HASTA ambos incluidos, siempre puedes emplear esta fórmula:

(int)(Math.random()*(HASTA-DESDE+1)+DESDE);

 

La clase Random

La clase Random, situada en el paquete java.util, nos brinda otra alternativa de obtener números al azar además del ya conocido método Math.random().

Para obtener números al azar lo primero que necesitamos es construir un objeto de la clase Random de la siguiente manera:

Ahora podemos utilizar los distintos métodos de la clase Random a través del objeto azar.

Método nextDouble()

El método nextDouble() devuelve un valor de tipo double como resultado de generar un número al azar entre 0 y 1 sin llegar a alcanzar el 1. Funciona exactamente igual que Math.random().

Método nextFloat()

El método nextFloat() devuelve un valor de tipo float como resultado de generar un número al azar entre 0 y 1 sin llegar a alcanzar el 1.

Método nextInt()

El método nextInt() devuelve un valor de tipo int resultado de generar un número al azar entre todos los posibles valores de un int (-2147483648 a 2147483647).

Método nextInt(int hasta)

Esta implementación del método nextInt devuelve un número entre 0 y el valor introducido como argumento sin alcanzarlo.

Método nextLong()

El método nextLong() devuelve un valor de tipo long resultado de generar un número al azar entre todos los posibles valores de un long (-9223372036854775808 a 9223372036854775807).

Método nextBoolean()

El método nextBoolean() devuelve un valor al azar entre true o false.

 

Utilizar el método Math.Random() resulta más sencillo y más eficiente porque no hay necesidad de instanciar una clase. Sin embargo, como has podido comprobar, la clase Random ofrece más posibilidades.

Publicada el
Categorizado como POO