Ejercicios Propuestos Parte 2 - Unidad I Desarrollo. 1. Uso de la clase random. La llamada a Math.random () devuelve un número aleatorio entre 0.0 y 1.0, excluido este último valor, es decir, puede devolver 0.346442, 0.2344234, 0.98345,.... En muchas de nuestras aplicaciones no nos servirá este rango de valores. Por ejemplo, si queremos simular una tirada de dado, queremos números entre 1 y 6 sin decimales. Debemos echar unas cuentas para obtener lo deseado. En primer lugar, miramos cuántos valores queremos. En nuestro caso del dado son 6 valores, del 1 al 6 ambos incluido. Debemos entonces multiplicar Math.random() por 6. Si quisiéramos valores entre dos números cualquiera ambos incluidos, por ejemplo, 5 y 10, la cuenta sería (maximo-minimimo)+1, es decir, (10-5)+1 = 6, también multiplicaríamos por 6. Math.random ()*6 // Esto da valores de 0.0 a 6.0, excluido el 6.0 Como nuestro primer valor es 1, le sumamos 1 al resultado. En el caso de que quisiéramos entre 5 y 10, habría que sumar 5, es decir, el valor mínimo. Math.random ()*6 + 1 // Esto da valores entre 1.0 y 7.0 excluido el 7.0 Finalmente, para conseguir un entero, quitamos los decimales usando la clase Math.floor () Int valorDado = Math.floor (Math.random ()*6+1); En general, para conseguir un número entero entre M y N con M menor que N y ambos incluidos, debemos usar esta fórmula Int valorEntero = Math.floor (Math.random ()*(N-M+1)+M); // Valor entre M y N, ambos incluidos. Si no queremos un valor entero sino doublé, la fórmula es sin el +1 Doublé valorAleatorio = Math.random ()*(N-M)+M; Eso sí, recuerda que el valor N queda excluido y no saldrá nunca. Uso de la clase math. Todas las propiedades y métodos de la clase Math son estáticos y deben llamarse utilizando la sintaxis Math.method (parameter) o Math.constant. En ActionScript, las constantes se definen con la máxima precisión de números con coma flotante IEEE-754 de doble precisión. Algunos de los métodos de la clase Math utilizan radianes de un Angulo como parámetro. Puede utilizar la ecuación siguiente para calcular valores en radianes o sencillamente pasar la ecuación (introduciendo un valor para grados) para el parámetro en radianes. Para calcular un valor en radianes, utilice esta fórmula: Radian = Math.PI/180 * grado A continuación, se muestra un ejemplo para pasar una ecuación como parámetro para calcular el seno de un ángulo de 45 grados: Math.SIN(Math.PI/180 * 45) es lo mismo que Math.SIN (.7854) La clase Math está totalmente admitida en Flash Player 5. En Flash Player 4, puede utilizar los métodos de la clase Math, pero se emulan utilizando aproximaciones y es posible que no sean tan precisos como las funciones matemáticas no emuladas que se utilizan en Flash Player 5. Resumen de métodos para la clase Math Método Descripción Math.abs() Math.acos() Math.asin() Math.atan() Math.atan2() Calcula un valor absoluto. Math. Sin() Calcula un arco coseno. Calcula un arco seno. Calcula un arco tangente. Calcula un Angulo desde el eje x hasta el punto. Redondea un número al entero más cercano hacia arriba. Calcula un coseno. Calcula un valor exponencial. Redondea un número al entero más cercano hacia abajo. Calcula un logaritmo natural. Devuelve el mayor de dos números enteros. Devuelve el menor de dos números enteros. Calcula x elevado a la potencia de y. Devuelve un número seudoaleatorio ente 0,0 y 1,1. Redondea al número entero más cercano. Calcula un seno. Math.sqrt() Math. Tan() Calcula una raíz cuadrada. Calcula una tangente. Math.ceil() Math.cos() Math.exp() Math.floor() Math.log() Math.max() Math.min() Math.pow() Math.random() Math.round() 2. Uso Clases, Métodos y Objetos en Java Método: Los métodos en java pueden tener parámetros, es decir, que un método puede utilizar variables predefinidas para ser utilizadas en sus procesos, Veamos un ejemplo de cómo hacer un método en el siguiente ejemplo. En este ejemplo vemos un programa normal en el cual se ejecuta un ciclo while que imprime números del 0 al 7, pero ¿es posible hacerlo utilizando un método? Ahora utilizaremos este mismo programa pero el ciclo se ejecutara en un método: view source 01 package ciclos; 02 03 /** 04 * 05 * @author xymind 06 */ 07 public class Main { 08 09 /** 10 * @param args the command line arguments 11 */ 12 public static void main(String[] args) { 13 14 iniciarCiclo();//aquí estamos ejecutando el método escrito en 15 //la parte de abajo, se puede utilizar mas de 1 vez 16 } 17 18 /*Comienza el método 19 Este método no regresa valores, es un método que únicamente 20 realiza un procedimiento, por lo que se declara como "void" seguido del 21 nombre que tendrá el método*/ 22 public void iniciarCiclo(){ 23 24 int x=0; 25 while(x!=7) 26 { 27 System.out.println("X vale: "+x); 28 x++; 29 30 } 31 } 32 33 } Objeto: En este ejemplo hemos considerado que el problema consta de tres tipos de vehículo: taxi, autobús y tranvía, y que esos tipos los denominamos clases. ¿Qué haríamos en Java para definir una clase? Indicar sus propiedades y operaciones (métodos) disponibles, por ejemplo: /* Ejemplo Clase Taxi - aprenderaprogramar.com */ Clase Taxi { Propiedades: Matrícula identificativa Distrito en el que opera Tipo de motor diesel o gasolina Coordenadas en las que se ubica Operaciones disponibles: Asignar una matrícula Asignar un distrito Asignar un tipo de motor Ubicar en unas coordenadas } El haber definido así el taxi significará que todo objeto de tipo Taxi que creemos tendrá una matrícula identificativa, un distrito en el que opera, un tipo de motor y unas coordenadas en las que se ubica. La creación de un objeto sería algo así como: “Crear un objeto Taxi con matrícula BFG-7452, distrito Norte, tipo de motor Diesel y coordenadas Desconocidas.” El uso de una operación sobre un objeto sería algo así como: “Taxi BFG-7452 -> Ubicar en coordenadas (X = 128223, Y = 877533)”. Las operaciones en Java se denominan métodos, veremos cómo se definen más adelante. Decimos que un objeto es una instancia de una clase. Por ejemplo el taxi matrícula BFG-7452 es una instancia de la clase Taxi. Varios objetos (p.ej. taxis) de una misma clase decimos que constituyen instancias múltiples de la clase. Más adelante veremos que tanto una clase como un objeto en Java pueden representar otras cosas además de lo que ahora hemos explicado, pero todo a su tiempo. 3. Uso del get y set Los métodos get y set, son simples métodos que usamos en las clases para mostrar (get) o modificar (set) el valor de un atributo. El nombre del método siempre será get o set y a continuación el nombre del atributo, su modificador siempre es public ya que queremos mostrar o modificar desde fuera la clase. Por ejemplo, getNombre o setNombre. Esta es la sintaxis de cada uno: Public tipo_dato_atributo getAtributo (){ Return atributo; } Public void setAtributo (tipo_dato_atributo variable){ this.atributo = variable; } Si usamos Eclipse tenemos una manera aún mas sencilla de generarlos automáticamente. Pinchamos en Source -> Generate Getters and Setters, nos aparecerá una ventana donde elegiremos que atributos generar su get o set, al pinchar en OK nos lo generara automáticamente estos métodos. Getters and setters Veamos un ejemplo: Clase ejecutable Public class EmpleadoApp { Public static void main (String [] args) { Empleado empleado1=new Empleado ("Fernando", "Ureña", 23, 800); Empleado empleado2=new Empleado ("", "López", 50 ,1800); //Mostramos el valor actual del salario del empleado1 System.out.println ("El salario del empleado1 es "+empleado1.getSalario ()); //Modificamos la edad del empleado1 empleado1.setEdad (43); empleado1.plus (100); //Mostramos el salario de nuevo, ahora tendrá 100 mas System.out.println("El salario actual del empleado1 es "+empleado1.getSalario()); //Modificamos el nombre del empleado2 empleado2.setNombre("Antonio"); empleado2.plus(100); //Mostramos el salario de nuevo, ahora tendrá 100 mas System.out.println("El salario del empleado2 es "+empleado2.getSalario()); } }