2. Esta presentación tiene como objetivo ver varios temas básicos de Java. Se va a utilizar en varias clases, no sólo en una, ya que el tiempo no alcanzaría. Para cada ejemplo mostrado, se realizará el programa correspondiente en java, si el ejemplo es un programa, lo editarán y ejecutarán para analizar el resultado del mismo. Deberán analizar los conceptos vistos con anterioridad, e indicar en una clase posterior la lista de conceptos involucrados en cada uno de estos ejemplos, es decir, si en un programa se ven operadores de incremento, indicar que contiene estos operadores, si muestra concatenación de cadenas, de la misma manera, ámbito de variable, etc. Deben guardar los programas que realicen en una carpeta, y la fecha de creación del programa debe coincidir con la del archivo guardado( como máximo debe tener un día de diferencia).
3. Un ejemplo con double Un ejemplo para calcular el área de un círculo (PI*r2) publicclassArea { publicstaticvoidmain(String[] args) { double PI = 3.1416; double radio = 3.2, area; area = radio * radio * PI; // Calculo el área System.out.println( "El área es: " + area); } Investigar para la siguiente clase como se define una constante, y volver a hacer este ejemplo, pero utilizado a PI y radio como constantes
4. Ámbito de una variable El ámbito de una variable u objeto es el espacio del programa en el que esa variable existe. Por ello, se habla de “ámbito de vida” De forma general (hay excepciones que veremos más adelante), la vida de una variable comienza con su declaración y termina en el bloque en el que fue declarada (los bloques de código se delimitan por llaves: {}). Por ejemplo, ¿cuál es el ámbito de la variable ‘radio’?: publicstaticvoidmain(String[] args) { double PI = 3.1416; double radio = 3; System.out.println( “El área es” + (PI*radio*radio) ); }
5. Conversión de tipos Se ha visto que los datos tienen un tipo. Pero en ocasiones nos conviene convertir un dato de su tipo original a otro Tipos de conversión: Automática o implícita. El tipo destino es más grande (mayor número de bits) que el tipo origen (ensanchamiento o promoción): int Origen = 65; float Destino = 4.35f; Destino = Origen; // ¿Cuál es el valor de ‘Destino’? Hacer el programa en java, que pruebe este ejemplo También hay conversión automática ante tipos compatibles. Por ejemplo, la asignación de un int a un char, investigar un ejemplo y traerlo para la siguiente clase. Explicita. La conversión se produce cuando el tipo destino es más pequeño que el origen (estrechamiento). Para ello debemos realizar un moldeado (cast): double Origen = 65.13; int Destino = 4; Destino = (int) Origen; // ¿Cuál es el valor de ‘Destino’? Hacer el programa en java que pruebe este ejemplo La conversión por medio de métodos es en realidad una aplicación de los tipos de conversión anteriores. Para ver ejemplos (transparencia dedicada a la clase String): String p = String.valueOf( numero); double radio = Double.parseDouble( cadena ); Vamos a dejar este ejemplo para el tema entrada de datos
8. 8 Introducción Las sentencias de control nos ayudan a que el flujo de ejecución del programa deje de tener un carácter lineal. Ejemplos de sentencias de control en la vida cotidiana: Ejemplo 1: Si el cheque es correcto y hay fondos Entonces pagar Si no: No pagar Ejemplo 2: Mientras la salsa no este densa: Calentar y remover Ejemplo 3: Siga adelante Cuando llegue a la plaza: Si es hora pico Entonces de vuelta a la derecha Si no: Siga en línea recta Vamos a ver los siguientes tipos de sentencias de control: Selección Iteración
9. 9 if / else (I) La sentencia básica para realizar bifurcaciones o ramificaciones. Formato: if (condición) sentencia 1; [else sentencia 2] La condición es una expresión booleana. Si es true, se ejecuta la sentencia 1; si es false, se ejecuta la sentencia 2 (si existiese) Ejemplo: int a = 3, b = 9, c; if (a < b && a != 0) c = b – a; else c = a – b; Precaución: La tabulación es fundamental para realizar código legible
10. 10 Instrucciones de flujo if..else publicclassControlFlujo{ publicstaticvoidmain(Stringarg[]){ //Asigacion de variable byte caliEstudi= 100; //Flujo de control if if( caliEstudi >= 60) System.out.println("Aprobado " + caliEstudi); }//main }//class
11. 11 if / else (II) Si hay más de una sentencia se deben delimitar los bloques por llaves {}. En el siguiente ejemplo se va a determinar las ventajas que tiene un cliente en función de los puntos de su tarjeta de compra: if (puntos > 1000) { tipo_cliente = "VIP"; descuento = 0.05f; } else { tipo_cliente = "Normal"; descuento = 0.02f; } System.out.println( "Tipo: " + tipo_cliente + "Descuento: " + descuento*100 + "%"); Los condicionales pueden ser anidados, es decir, que uno este dentro de otro. En el ejemplo se va a añadir otra condición: para los clientes de más de 1000 puntos, si su antigüedad es mayor de 1825 días, se le otorgará un descuento del 6%: if (puntos > 1000) { tipo_cliente = "VIP"; descuento = 0.05f; if (antiguedad > 1825) descuento = 0.06f; }
12. Ejemplo Condicional publicclassEjercicioCondicional { //Comienzo del flujo principal del programa. publicstaticvoidmain(String [] argumentos) { // Uso de if. intx = 5; int y = 7; comparar(x,y); comparar(7,5); comparar(5,5); }// fin main publicstaticvoid salida ( String cadena ) { System.out.println(cadena); } // fin salida, como no estamos utilizando un objeto aún, el método se declara static publicstaticvoid comparar(int entero1, int entero2) { if(entero1 > entero2) salida("El primer argumento es menor"); else if(entero1 < entero2) salida ("El primer argumento es mayor."); else salida("Los dos argumentos son iguales"); }// fin comparar, es static el metodo ya que aún no utilizamos un objeto }//fin classEjercicioCondicional
13. Atributo static Un atributo static no es un atributo específico de un objeto , sino más bien es un atributo de la clase; esto es, un atributo del que sólo hay una copia que comporten todos los objetos de la clase. Por esta razón, un atributo static existe y puede ser utilizado aunque no exista ningún objeto de la clase.
14. 14 switch Formato: switch ( expresión ) { // expresión: no tiene que ser booleano case constante1: secuencia de sentencias break; case constante2: secuencia de sentencias break; ... default: secuencia de sentencias } No olvidar ‘break’. Pero a veces es adecuado omitirlo: switch ( categoria ) { case 1: case 2: porcen = 0.2; // Tanto para 1 como para 2 break; case 3: porcen = 0.15; break; default: porcen = 0.1; }
20. 17 while Formato: while (condición) Sentencia La sentencia puede ser un bloque delimitado por llaves ({}). El bucle se realiza mientras la condición sea cierta Ejemplo en el que se modifica un vector de números, de tal modo que se pone el cuadrado del número que antes estuviese: double serie[] = {23, 4, 36, 9}; int i = 0; while ( i < serie.length ) { System.out.print( "Posición: " + i + " Anterior: " + serie[i] ); serie[i] = serie[i] * serie[i]; System.out.println( " Cuadrado: " + serie[i] ); i++; } Bucle Posición: 0 Anterior: 23.0 Cuadrado: 529.0 Posición: 1 Anterior: 4.0 Cuadrado: 16.0 Posición: 2 Anterior: 36.0 Cuadrado: 1296.0 Posición: 3 Anterior: 9.0 Cuadrado: 81.0
21. Investigar n para la siguiente clase: length Cómo se declara e inicializa un vector Y cómo se accede a un elemento del vector
22. Ejemplos while Tabla multiplicar de un numero publicclassEjemploWhile { publicstaticvoidmain (Stirng [] args) { int n, i; n es numero e i un contador n= Integer.parseInt( args[0]); i=0; while)(i <=10) { System.out.println (n+ “x ” +i+ “ = ” + (n*i)); i++ }// fin while }fin main }fin class Realizarlo en clase, recordar que al ejecutar el programa deben mandar el número como argumento, tal como lo hicieron con el ejercicio TotalHoras.
23. Otro ejemplo while publicclasss Ejemplowhile2 { publicstaticvoidmain ( Stringargs[]) { int n, divisor; n= Integer.parseInt(args[0]); System.out.println(“Los divisores son: ”); divisor=n; while (divisor>0) { if ((n%divisor)==0) System.out.println(divisor); divisor— } fin while } fin main } fin class
24. 21 for (I) En la vida cotidiana hay numerosos casos de iteraciones (repeticiones). Por ejemplo, si alguien tiene que asignar un número a las cinco personas que hay en una habitación haría algo así: for (el número es 1; mientras que el número sea < 6; incremento el número) Digo en voz alta el número, señalando a la persona correspondiente De forma semejante, el formato de for es: for ( inicialización; condición; variación ) Sentencia Con un ejemplo puede aclararse. Suponer que se quiere mostrar por pantalla los cuatro primeros números enteros, empezando por el 3: La inicialización sería: empezar con el número 3 Condición: mientras que el número sea menor que 7 (es aquello que debe cumplirse para poder volver a repetir la sentencia) Variación: incrementar en uno el número Sentencia (aquello que se debe iterar o repetir, en nuestro ejemplo 4 veces): mostrar el número por pantalla Ejemplo: int i; for ( i = 3; i < 7; i++) System.out.println( i ); Es posiblesaltar la inicialización (empieza en el valor previo) int i = 3; for ( ; i < 7; i++) System.out.println( i );
25. 22 for (II) Vamos a ver paso a paso como actua la iteración Ejemplo: int i; for ( i = 1; i < 3; i++) System.out.println( i ); Al observar la ejecución paso a paso es importante recordar: Siempre se evalúa la condición ANTES de ejecutar la sentencia DESPUÉS de la sentencia siempre se realiza la variación Se pueden iterar varias variables, para lo cual se necesitan comas: for(i=0, k=5; i < 5; i++, k=k+5) INICIO: la variable i se inicia a 1 CONDICIÓN: se comprueba la condición: ¿ i<3 ? SI SENTENCIA: se ejecuta la sentencia println VARIACIÓN: al terminar el bucle, se incrementa i. Ahora vale 2 CONDICIÓN: se comprueba la condición: ¿ i<3 ? SI SENTENCIA: se ejecuta la sentencia println VARIACIÓN: al terminar el bucle, se incrementa i. Ahora vale 3 CONDICIÓN: se comprueba la condición: ¿ i<3 ? NO, fin del bucle IMPORTANTE: al salir del bucle el valor de i es 3. ¿Cuál sería su valor si la condición fuese i<=3?
26. 23 for (III) Igual que los casos anteriores: se utilizan {} para acotar conjuntos de sentencias que pueden ser anidables. Ejemplo en el que se calcula la media y el máximo de un vector de números: publicstaticvoidmain(String[] args) { float serie[] = {-8, -12, -4, -14}; float media, sumatorio = 0; int contador; floatmaximo = serie[0]; // ¿Funcionaria si asignamos el 0? /*** Encontrar el máximo y sumamos todos los números ***/ for ( contador = 0; contador < serie.length; contador++ ) { if (serie[contador] > maximo) maximo = serie[contador]; sumatorio = sumatorio + serie[contador]; } /*** Calcular media. Mostrar la media y el maximo ***/ media = sumatorio / contador; System.out.println( "La media es " + media + " y el max es " + maximo); } Se pueden clasificar las variables en virtud de su función o uso (hasta ahora se han clasificado en virtud del tipo de dato). Entre estos tipos de usos hay dos que son muy comunes y aparecen en el ejemplo anterior: Variables contador Variables sumatorio
27. 24 do-while Formato: do { Sentencia } while (condición); A diferencia de while, analiza la condición al final del bucle. Por tanto, la sentencia se realiza al menos una vez Ejemplo. ¿Qué hace?: int i = 1; do { System.out.println( i*i*i ); i++; } while ( i < 3 ); do-while es muy útil en la gestión de menús. El diseño sería: do { Muestro las opciones de menú Solicito la opción por teclado switch (opcion) { En función de la opción elegida realizo una u otra acción } } while (la opción no sea “Salir”);
28. 25 Salto Hay sentencias que controlan el flujo de ejecución, de tal forma que realizan saltos fuera del bloque en el que se encuentran: break: salta fuera del bucle o switch return: salta fuera del método Un ejemplo con break. Busca un nombre en una lista y, si lo encuentra, sale del bucle: privatestaticvoidfuncion() { int i = 0; String nombre[] = { "Ana", "Belen", "Juan", "Pedro"}; StringnombrBuscado = “Belen"; boolean encontrado = false; while (i < nombre.length) { if (nombre[i].equals(nombreBuscado)) { System.out.println(nombre_buscado + " está en la posición " + i); encontrado = true; break; } i++; } if (!encontrado) System.out.println("No encontrado"); }
29.
30. 28 Stream de entrada por teclado Para manejar entradas por teclado se tieneque crear un BufferedReader a partir de System.in: import java.io.*; publicclass inicio { publicstaticvoidmain(String[] args) throwsIOException { String cadena; BufferedReader entrada; entrada = new BufferedReader(new InputStreamReader(System.in)); // Crear objeto de entrada System.out.println("Escribe tu nombre:"); cadena = entrada.readLine(); //leemos cadena de caracteres mediante readLine() } } Condiciones previas a la creación de un BufferedReader: Se tienenque importar las clases que uso (BufferedReader y InputStreamReader), que están en el paquete java.io, por medio de import. Se tiene que poner “throwsIOException” en la función que usa BufferedReader (ya se explicará más adelante el manejo de excepciones). Una vez creado el objeto de entrada para teclado, mediante BufferedReader, se puede leer la entrada por teclado mediante una llamada a objeto.readLine() (la entrada termina al pulsar Enter). No olvidar que esta función devuelve un String, es decir, cualquier cosa que el usuario teclea se almacena como una cadena, sea “pedro” o “3420”. Java es un lenguaje fuertemente tipado y si se quiere que lo tecleado se convierta en un número habrá que hacer posteriormente una conversión mediante métodos, como se ve en el siguiente ejemplo.
31. 29 Un ejemplo entrada por teclado y conversión publicstaticvoidmain(String[] args) throwsIOException { double PI = 3.1416, radio; intarea_int; String c; /* Creo el objeto 'entrada', es un lector de entradas por teclado */ BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); System.out.print( "Escriba el radio: " ); c = entrada.readLine(); // Leo un String de la entrada de teclado radio = Double.parseDouble( c ); // Convierto el String en double radio System.out.println( "El área es: " + radio * radio * PI); area_int = (int) (radio * radio * PI); // Calculo el área entera del círculo. Realizar un casting System.out.println( "El área (entera) es: " + area_int); } Desde un String existen conversiones a otros tipos: Integer.parseInt( cadena ) o Float.parseFloat( cadena). La conversión inversa utiliza String.valueOf( numero). Buscar ejemplos de conversión inversa para la siguiente clase.
32. Fuentes Bibliográficas: Introducción a Java(I) Consultado el día 8/02/2010. Disponible en: www.pdfbar.com/free-ppt-download/manara-ppt-Lnl.html Introducción a Java Consultado el día 8/02/2010. Disponible en: ants.dif.um.es/~fernan/Java.ppt Consultar los libros básicos de la bibliografía proporcionada en el programa de la experiencia educativa (Dada el primer día de clases)