Java  BásicoProgramación 302
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).
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 áreaSystem.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
Ámbito de una variableEl á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) );}
Conversión de tiposSe ha visto que los datos tienen un tipo. Pero en ocasiones nos conviene convertir un dato de su tipo original a otroTipos 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 ejemploLa 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
6Comprender la conversión de tiposSuponer que se tiene en una variable (int) el precio de un producto, el cual se quiere incrementarlo en un 20%:int precio = 10000;precio = precio * 1.2;Este código parece correcto, sin embargo el compilador nos informa de un error: “Error num.: 355 : puede perderse precisión: double, hacía falta int”. ¿Cuál es la razón? Para entenderlo, conviene comprender como trabaja el ordenador:El ordenador trata de realizar el producto (precio*1.2) entre un int y un double (1.2), para lo cual el ordenador convierte de forma automática el int en un double. Hasta aquí todo va bien, el resultado de multiplicar dos números double es un double:precio = precio * 1.2;(int)(double)(conversión automática a double)(double)El problema viene a continuación: no hay conversión automática de un double (el resultado del producto) a un int (la variable a la izquierda del operador =) ya que el tipo double es mayor que intPara que se produzca esta conversión es necesario realizar un casting (cast):precio = (int) (precio * 1.2); // Esto si es correcto
Sentencias de control
8IntroducciónLas 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 fondosEntonces pagarSi no:No pagarEjemplo 2:Mientras la salsa no este densa:Calentar y removerEjemplo 3:Siga adelanteCuando llegue a la plaza:Si es hora picoEntonces de vuelta a la derechaSi no:Siga en línea rectaVamos a ver los siguientes tipos de sentencias de control:SelecciónIteración
9if / 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
10Instrucciones de flujo if..elsepublicclassControlFlujo{    publicstaticvoidmain(Stringarg[]){        		//Asigacion de variable        			byte caliEstudi= 100;                		//Flujo de control ifif( caliEstudi >= 60)     					System.out.println("Aprobado " + caliEstudi);    	}//main}//class
11if / 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 + "\tDescuento: " + 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;}
Ejemplo  CondicionalpublicclassEjercicioCondicional{//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 mainpublicstaticvoid salida ( String cadena ) {System.out.println(cadena); } // fin salida, como no estamos utilizando un objeto aún, el método se declara staticpublicstaticvoid comparar(int entero1, int entero2) {if(entero1 > entero2)         salida("El primer argumento es menor");elseif(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
Atributo staticUn 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.
14switchFormato: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;}
15Instrucciones de flujoswitchEjemplo: switch (modeloAuto) {	case DELUJO:System.out.printl(“Guao”);		break;	case ESTANDARD;System.out.println(“Bueno”);		break;	default:System.out.println(“Hum”);	}Tipos datos para switchPermitidos:Int
Promover a int:
byte
short
charNo permitidos:String, float, long16Instrucciones de flujoswitchpublicclass SwitchTemporada{    publicstaticvoid main(String arg[]){       int mes=4;        		String estacion;        switch(mes){            case12:            case1:            case2:                			estacion = "Invierno";                break;            			case3:            			case4:           case5:                		estacion ="Primavera";                break;            case6:            case7:            case8:                estacion = "Verano";                break;            case9:            case10:            case11:                estacion = "Otoño";                break;            default:                estacion = "Mes desconocido";       }//fin switchSystem.out.println("Abril esta en " + estacion + ".");    }//main}//class
17whileFormato:while (condición)SentenciaLa sentencia puede ser un bloque delimitado por llaves ({}). El bucle se realiza mientras la condición sea ciertaEjemplo 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 + "\t Anterior: " + serie[i] );      	serie[i] = serie[i] * serie[i];System.out.println( "\t Cuadrado: " + serie[i] );      	i++;    }BuclePosición: 0	 Anterior: 23.0	Cuadrado: 529.0Posición: 1	 Anterior: 4.0	 	Cuadrado: 16.0Posición: 2	 Anterior: 36.0	Cuadrado: 1296.0Posición: 3	 Anterior: 9.0		Cuadrado: 81.0
Investigar n para la siguiente clase:lengthCómo se declara e inicializa un vectorY cómo se accede a un elemento del vector
Ejemplos while\\ Tabla  multiplicar de un numeropublicclassEjemploWhile{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 classRealizarlo en clase, recordar que al ejecutar el programa deben mandar el número como argumento, tal como lo hicieron con el ejercicio TotalHoras.
Otro ejemplo whilepublicclasss 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
21for (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 correspondienteDe forma semejante, el formato de for es:for ( inicialización; condición; variación ) 	SentenciaCon 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 3Condició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úmeroSentencia (aquello que se debe iterar o repetir, en nuestro ejemplo 4 veces): mostrar el número por pantallaEjemplo: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 );
22for (II)Vamos a ver paso a paso como actua la iteraciónEjemplo: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 sentenciaDESPUÉS de la sentencia siempre se realiza la variaciónSe 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 1CONDICIÓN: se comprueba la condición: ¿ i<3 ? SISENTENCIA: se ejecuta la sentencia printlnVARIACIÓN: al terminar el bucle, se incrementa i. Ahora vale 2CONDICIÓN: se comprueba la condición: ¿ i<3 ? SISENTENCIA: se ejecuta la sentencia printlnVARIACIÓN: al terminar el bucle, se incrementa i. Ahora vale 3CONDICIÓN: se comprueba la condición: ¿ i<3 ? NO, fin del bucleIMPORTANTE: al salir del bucle el valor de i es 3. ¿Cuál sería su valor si la condición fuese i<=3?
23for (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 contadorVariables sumatorio
24do-whileFormato: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 vezEjemplo. ¿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 tecladoswitch (opcion) {			En función de la opción elegida realizo una u otra acción		}} while (la opción no sea “Salir”);
25SaltoHay 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 switchreturn: salta fuera del métodoUn 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");}
26Streams (I)Cualquier programa realizado en Java que necesite llevar a cabo una operación de I/O lo hará a través de un stream. Un stream, cuya traducción literal es "flujo", es una abstracción de todo aquello que permite introducir o extraer información. Así, un stream de teclado es un flujo de entrada para el programa y un stream de pantalla es un flujo de salida del programaInput:TecladoOutput:PantallaLa vinculación de este stream al dispositivo físico (teclado, pantalla, impresora, etc.) la hace el sistema de entrada y salida de Java.27Streams (II)El paquete System define tres clases:in (entrada estándar)out (salida estándar)err (salida de errores estándar)La escritura hacia pantalla se hace con System.out	System.out.println(“Hola Mundo”); // Añade nueva línea al final 	System.out.print(“Adios”);        // NO añade nueva línea al final La lectura desde teclado se hace con System.in
28Stream de entrada por tecladoPara 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 entradaSystem.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.

Java básico

  • 1.
    Java BásicoProgramación 302
  • 2.
    Esta presentación tienecomo 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 condouble\\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 áreaSystem.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 unavariableEl á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 tiposSeha visto que los datos tienen un tipo. Pero en ocasiones nos conviene convertir un dato de su tipo original a otroTipos 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 ejemploLa 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
  • 6.
    6Comprender la conversiónde tiposSuponer que se tiene en una variable (int) el precio de un producto, el cual se quiere incrementarlo en un 20%:int precio = 10000;precio = precio * 1.2;Este código parece correcto, sin embargo el compilador nos informa de un error: “Error num.: 355 : puede perderse precisión: double, hacía falta int”. ¿Cuál es la razón? Para entenderlo, conviene comprender como trabaja el ordenador:El ordenador trata de realizar el producto (precio*1.2) entre un int y un double (1.2), para lo cual el ordenador convierte de forma automática el int en un double. Hasta aquí todo va bien, el resultado de multiplicar dos números double es un double:precio = precio * 1.2;(int)(double)(conversión automática a double)(double)El problema viene a continuación: no hay conversión automática de un double (el resultado del producto) a un int (la variable a la izquierda del operador =) ya que el tipo double es mayor que intPara que se produzca esta conversión es necesario realizar un casting (cast):precio = (int) (precio * 1.2); // Esto si es correcto
  • 7.
  • 8.
    8IntroducciónLas sentencias decontrol 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 fondosEntonces pagarSi no:No pagarEjemplo 2:Mientras la salsa no este densa:Calentar y removerEjemplo 3:Siga adelanteCuando llegue a la plaza:Si es hora picoEntonces de vuelta a la derechaSi no:Siga en línea rectaVamos a ver los siguientes tipos de sentencias de control:SelecciónIteración
  • 9.
    9if / 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.
    10Instrucciones de flujoif..elsepublicclassControlFlujo{ publicstaticvoidmain(Stringarg[]){ //Asigacion de variable byte caliEstudi= 100; //Flujo de control ifif( caliEstudi >= 60) System.out.println("Aprobado " + caliEstudi); }//main}//class
  • 11.
    11if / 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 + "\tDescuento: " + 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 CondicionalpublicclassEjercicioCondicional{//Comienzodel 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 mainpublicstaticvoid salida ( String cadena ) {System.out.println(cadena); } // fin salida, como no estamos utilizando un objeto aún, el método se declara staticpublicstaticvoid comparar(int entero1, int entero2) {if(entero1 > entero2) salida("El primer argumento es menor");elseif(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 staticUn atributostatic 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.
    14switchFormato: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;}
  • 15.
    15Instrucciones de flujoswitchEjemplo:switch (modeloAuto) { case DELUJO:System.out.printl(“Guao”); break; case ESTANDARD;System.out.println(“Bueno”); break; default:System.out.println(“Hum”); }Tipos datos para switchPermitidos:Int
  • 16.
  • 17.
  • 18.
  • 19.
    charNo permitidos:String, float,long16Instrucciones de flujoswitchpublicclass SwitchTemporada{ publicstaticvoid main(String arg[]){ int mes=4; String estacion; switch(mes){ case12: case1: case2: estacion = "Invierno"; break; case3: case4: case5: estacion ="Primavera"; break; case6: case7: case8: estacion = "Verano"; break; case9: case10: case11: estacion = "Otoño"; break; default: estacion = "Mes desconocido"; }//fin switchSystem.out.println("Abril esta en " + estacion + "."); }//main}//class
  • 20.
    17whileFormato:while (condición)SentenciaLa sentenciapuede ser un bloque delimitado por llaves ({}). El bucle se realiza mientras la condición sea ciertaEjemplo 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 + "\t Anterior: " + serie[i] ); serie[i] = serie[i] * serie[i];System.out.println( "\t Cuadrado: " + serie[i] ); i++; }BuclePosición: 0 Anterior: 23.0 Cuadrado: 529.0Posición: 1 Anterior: 4.0 Cuadrado: 16.0Posición: 2 Anterior: 36.0 Cuadrado: 1296.0Posición: 3 Anterior: 9.0 Cuadrado: 81.0
  • 21.
    Investigar n parala siguiente clase:lengthCómo se declara e inicializa un vectorY cómo se accede a un elemento del vector
  • 22.
    Ejemplos while\\ Tabla multiplicar de un numeropublicclassEjemploWhile{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 classRealizarlo 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 whilepublicclasssEjemplowhile2{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.
    21for (I)En lavida 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 correspondienteDe forma semejante, el formato de for es:for ( inicialización; condición; variación ) SentenciaCon 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 3Condició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úmeroSentencia (aquello que se debe iterar o repetir, en nuestro ejemplo 4 veces): mostrar el número por pantallaEjemplo: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.
    22for (II)Vamos aver paso a paso como actua la iteraciónEjemplo: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 sentenciaDESPUÉS de la sentencia siempre se realiza la variaciónSe 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 1CONDICIÓN: se comprueba la condición: ¿ i<3 ? SISENTENCIA: se ejecuta la sentencia printlnVARIACIÓN: al terminar el bucle, se incrementa i. Ahora vale 2CONDICIÓN: se comprueba la condición: ¿ i<3 ? SISENTENCIA: se ejecuta la sentencia printlnVARIACIÓN: al terminar el bucle, se incrementa i. Ahora vale 3CONDICIÓN: se comprueba la condición: ¿ i<3 ? NO, fin del bucleIMPORTANTE: al salir del bucle el valor de i es 3. ¿Cuál sería su valor si la condición fuese i<=3?
  • 26.
    23for (III)Igual quelos 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 contadorVariables sumatorio
  • 27.
    24do-whileFormato: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 vezEjemplo. ¿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 tecladoswitch (opcion) { En función de la opción elegida realizo una u otra acción }} while (la opción no sea “Salir”);
  • 28.
    25SaltoHay sentencias quecontrolan 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 switchreturn: salta fuera del métodoUn 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.
    26Streams (I)Cualquier programarealizado en Java que necesite llevar a cabo una operación de I/O lo hará a través de un stream. Un stream, cuya traducción literal es "flujo", es una abstracción de todo aquello que permite introducir o extraer información. Así, un stream de teclado es un flujo de entrada para el programa y un stream de pantalla es un flujo de salida del programaInput:TecladoOutput:PantallaLa vinculación de este stream al dispositivo físico (teclado, pantalla, impresora, etc.) la hace el sistema de entrada y salida de Java.27Streams (II)El paquete System define tres clases:in (entrada estándar)out (salida estándar)err (salida de errores estándar)La escritura hacia pantalla se hace con System.out System.out.println(“Hola Mundo”); // Añade nueva línea al final System.out.print(“Adios”); // NO añade nueva línea al final La lectura desde teclado se hace con System.in
  • 30.
    28Stream de entradapor tecladoPara 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 entradaSystem.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.
    29Un ejemplo entradapor teclado y conversiónpublicstaticvoidmain(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 radioSystem.out.println( "El área es: " + radio * radio * PI);area_int = (int) (radio * radio * PI); // Calculo el área entera del círculo. Realizar un castingSystem.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 aJava(I)Consultado el día 8/02/2010. Disponible en: www.pdfbar.com/free-ppt-download/manara-ppt-Lnl.htmlIntroducción a JavaConsultado el día 8/02/2010. Disponible en:ants.dif.um.es/~fernan/Java.pptConsultar los libros básicos de la bibliografía proporcionada en el programa de la experiencia educativa (Dada el primer día de clases)