|
Clases Java |
Anterior | Siguiente |
La clase Math representa la librería matemática de Java. Las funciones que contiene son las de todos los lenguajes, parece que se han metido en una clase solamente a propósito de agrupación, por eso se encapsulan en Math, y lo mismo sucede con las demás clases que corresponden a objetos que tienen un tipo equivalente (Character, Float, etc.). El constructor de la clase es privado, por los que no se pueden crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde cualquier sitio y static para que no haya que inicializarla. Si se importa la clase, se tiene acceso al conjunto de funciones matemáticas estándar:
El ejemplo java800.java, muestra la utilización de algunas de las funciones de la clase Math: class java800 { public static void main( String args[] ) { int x; double rand,y,z; float max; rand = Math.random(); x = Math.abs( -123 ); y = Math.round( 123.567 ); z = Math.pow( 2,4 ); max = Math.max( (float)1e10,(float)3e9 ); System.out.println( rand ); System.out.println( x ); System.out.println( y ); System.out.println( z ); System.out.println( max ); } La inclusión de la conectividadcon bases de datos SQL , obligó a definir en Java una nueva forma de trabajar con datos SQL de tipo NUMERIC y DECIMAL , que requieren precisión absoluta. Como resultado surgieron las clases BigDecimal y BigInteger, que permiten trabajar con precisión arbitraria, para representar datos que son habituales de las Bases de Datos, como puede ser la deuda pública de un país en una moneda pequeña, como pueda se la lira italiana. La clase BigInteger también resulta útil cuando los tipos primitivos de Java (byte, int, long) no proporcionan sufiente precición. Por ejemplo, cuando se está construyendo una clave pública para encriptación que involucra operaciones exponenciales muy grantes y a manipular números primos de cientos de bits, y esta clase es ideal para estas acciones El constructor más sencillo es el que construye un BigDecimal a partir de su representación como cadena: BigDecimal( String s ); Aunque la cadena no puede contener ningún signo no numérico, ni siquiera espacios en blanco, ya que de lo contrario se produce una excepción de tipo NumberFormatException. Un método interesante es el que permite fijar la precisión que se desea tener, es decir, el número de dígitos significativos que hay depués de la coma decimal, y el tipo de redondeo que se va a utilizar: setScale( int precision,int redondeo ); Los operadores que se utilizan con estas clases no son los clásicos, sino que están disponibles métodos especiales para sumar, restar, multiplicar dividir y para desplazar la coma decimal un número determinado de posiciones a derecha o izquierda: add( BigDecimal a ); substract( BigDecimal a ); multiply( BigDecimal a ); divide( BigDecimal a,int modo_redondeo ); movePointRight( int posiciones ); movePointLeft( int posiciones ); Una aplicación ya clásica es la muestra el ejemplo java801.java, que calcula una constante conocida con un número determinado de decimales, en este caso la constante e. Aunque no es la forma óptima de calcularla, porque hay otras que convergen más rápidamente, se puede zomar una aproximación con z=200 y una precisión de 300 dígitos, utilizando la fórmula siguiente: Y el código de este ejemplo tan sencillo que implementa la fórmula es el que se muestra a continuación: import java.math.*; class java801 { public static void main( String args[] ) { BigDecimal e; BigDecimal factor; e = new BigDecimal( "1" ).setScale( 300,BigDecimal.ROUND_DOWN ); factor = new BigDecimal( "1" ).setScale( 300,BigDecimal.ROUND_DOWN ); // Se obtiene la expresión del paréntesis de la fórmula factor = factor.divide( new BigDecimal( 200 ),BigDecimal.ROUND_DOWN ); factor = factor.add( new BigDecimal( 1 ) ); // Se multiplica la expresión para obtener la potencia adecuada for( int i=1; i < 200; i++ ) e = e.multiply( factor ); System.out.println( e ); } } Cuando se ejecute el ejemplo es conveniente hacerlo con el comando: %java java801 | more para que la pantalla no se llene con una cantidad impresionante de cifras que van a impedir que las primeras queden visibles el tiempo suficiente para darse cuenta de que están ahí. Al trabajar con caracteres se necesitan muchas funciones de comprobación y traslación. Estas funciones están empleadas en la clase Character. De esta clase sí que se pueden crear instancias, al contrario que sucede con la clase Math. La primera sentencia creará una variable carácter y la segunda un objeto Character: char c; Character C;
En este caso, si tuviésemos un objeto Character C , no se podría hacer C.isLowerCase(), porque no se ha hecho un new de Character. Estas funciones son estáticas y no conocen al objeto, por eso hay que crearlo antes.
Traslaciones de carácter/dígito int i = Character.digit( c,base ); char c = Character.forDigit( i,base ); C = new Character( 'J' ); char c = C.charValue(); String s = C.toString(); |
|