24/01/12
1
Introducción a la Programación IV
Curso de Programación en Java
Luis Guerra [email protected]
Enero 2012
Modificador final
! Una variable declarada con final no puede volver a ser reinicializada
final int numero = 2;!
numero = 3; //ERROR!
final int numero;!
numero = 2;!
numero = 3; // ERROR!
! Para definir constantes
! También se uIliza con clases, variables de clase, métodos, ... (se verá más adelante)
Estructuras de Control
Orden de ejecución
! Un algoritmo es un procedimiento para resolver un problema en términos de: ! acciones a ejecutar ! El orden en que las acciones van a ser ejecutadas
! Hasta ahora, las sentencias de un programa ejecutaban una detrás de otra ! Ejecución secuencial
! Existen otro Ipo de sentencias que permiten al programador especificar que la siguiente sentencia a ejecutar no sea la siguiente ! Transferencia de control
Transferencia de Control
! El modelo más básico de transferencia de control que uIlizaron los primeros lenguajes de programación fue por medio de la instrucción goto!! Fuente de muchos problemas en del desarrollo de SW ! Código Spague-
10 i = 0
20 i = i + 1
30 PRINT i; " cuadrado= "; i * i
40 IF i >= 10 THEN GOTO 60
50 GOTO 20
60 PRINT "Programa Terminado."
70 END
Transferencia de Control II
! El estudio de Bohm y Jacobini demosotró que los programas podían ser escritos sin ninguna sentencia goto
! Sólo con tres Ipos de estructuras de control: ! Estructura secuencial ! Estructura de selección ! Estructura de repeIción
Bohm, C., and G. Jacopini, “Flow Diagrams, Turing Machines, and Languages with Only Two FormaIon Rules,” Communica)ons of the ACM, Vol. 9, No. 5, May 1966, pp. 336–371.
24/01/12
2
Estructura secuencial
! Implementada dentro del lenguaje Java
! A menos que se le especifique lo contrario, se ejecutan las sentencias, una a conInuación de la otra, en el orden en el que fueron escritas
Estructuras de selección
! Java dispone de tres estructuras de selección: ! if!
! if/else!
! switch!
If
! Se uIliza para seleccionar entre disIntas líneas de acción de un programa
! Realiza la acción (o grupo de acciones) sólo si la expresión condicional se evalúa como verdadera ! expresión condicional: variables booleanas,
sentencias con operadores relacionales (>,<,...), lógicos (&&, ||, !) y de igualdad (==)
! Un único punto de entrada y de salida
! Si hay una única sentencia se pueden omiIr las llaves
! Las variables declaradas en el grupo de acciones sólo son visibles dentro del bloque
if ( condicion ) {!! sentencia1;!! sentencia2;!! ...!!}!!//El código se indenta!
Ejemplos if ( nota < 5 ) {! ! System.out.println(“Suspenso”);!!}!!!!!if ( var1 == var2 ) {! ! // var3 sólo tiene visibilidad dentro del bloque!! ! int var3 = 4;!! System.out.println(“Son iguales”);!!!}!!!
if else
! En caso de no cumplirse la condición que acompaña al if se ejecuta el bloque del else
! No lleva condición
if ( condicion ) {!! sentencia1;!! sentencia2;!! ...!!}!!else {!! sentencia3;! ...;!}!
Ejemplos
if ( edad >= 18) {!! System.out.println(“Bienvenido”);!!}!!else {!! System.out.println(“Acceso no permitido !!a menores”);!!}!
24/01/12
3
Comprobando varios casos
! Para analizar varios cosas, se pueden uIlizar varios if/else ! cada uno dentro del otro
if ( nota >= 9)!! System.out.println(“Sobresaliente”);!!else!! if ( nota >= 7 && nota < 9 )!! System.out.println(“Notable”);! ! else! ! if (nota >=5 && nota < 7 )! ! System.out.println(“Aprobado”);! ! else! ! Sysmte.out.println(“Suspenso”);! !
Comprobando varios casos II
! Más claro si se escribe así:
if ( nota >= 9)!! System.out.println(“Sobresaliente”);!!else if ( nota >= 7 && nota < 9 )!! System.out.println(“Notable”);! !else if (nota >= 5 && nota < 7 )! ! System.out.println(“Aprobado”);! !else! ! System.out.println(“Suspenso”);! !
switch
! Para manejar selecciones múlIples
! Ofrece un esquema más cómodo que el anidamiento de if else
! La condición Iene que evaluarse a un int, char, short, byte o enum (se verán más adelante)
! ¡Los valores sólo pueden ser constantes del mismo Ipo!
! Si no se añade break se conInua ejecutando las acciones del siguiente caso
switch(condicion) {!
case valor:!
sentencia1;!
break;!
case valor2:!
sentencia2;!
default:!
sentencia3;!
}!
!
Ejemplos switch(nota) {! case 10:! case 9:! System.out.println(“Sobresaliente”);! break;! case 8:! case 7:! System.out.println(“Notable”);! break;! case 6:! case 5:! System.out.println(“Aprobado”);! break;! default:! System.out.println(“Suspenso”);!}!!
Ejemplos final int dos = 2;!
int valor = 3;!
switch(valor) {!
case dos:!
System.out.println(“es un dos”);!
break;!
default:!
System.out.println(“No es un dos”);!
}!
!
Ventajas e Inconvenientes del switch
! Aporta mayor claridad que un esquema if else ! sobre todo cuando hay varios casos
! Sin embargo: ! No permiten cadenas de caracteres
! O Ipos reales u otras clases
! No permite definir rangos ! Hay varios lenguajes que ya lo permiten
! Fuente de errores: ! Ej: Olvidarse de poner el break o el default
24/01/12
4
Estructuras de RepeIción
! Una estructura de repeIción permite al programador especificar que una acción se Iene que repeIr mientras que se cumpla una condición ! Ej: Mientras haya comida en el plato sigue comiendo
! Java dispone de tres estructuras de repeIción: ! while ! do/while ! for
while
! Repite un conjunto de sentencias
! Mientras se cumpla la condición se ejecuta el bloque de sentencias
! Las variables definidas dentro del bloque de sentencias sólo se puede uIlizar dentro del bloque
! Las variables usadas en la condición Ienen que haber sido declaradas antes de que se evalúe la expresión
! Puede no ejecutarse nunca
while ( condicion ) {!! sentencia1;!! sentencia2;!! ...!!}!!//El código se indenta!!!
Ejemplos int numero = 1; // Se declara antes!!while ( numero <= 10) {!! System.out.println(numero);!! numero += 1; // ¿Que sucedería si no estuviese?!!!}!!!while ( numero <= 20 ) {!! int otronumero = numero * 2;!! if ( otronumero < 30 ) {! ! System.out.println(“otro numero < 20”);! ! }!!}!!!!!!
do/while
! Similar al while salvo porque el bloque de sentencias se ejecuta antes de evaluar la condición ! Siempre se ejecuta una vez el bloque de sentencias
do {!
sentencia1;!
sentencia2;!
} while (condicion);!
!
Ejemplos int numero = 1;!do {! System.out.println(numero);! numero++;!} while (numero <= 10);!!do {! System.out.println(numero);!} while (numero <= 10);!!int respuesta;!do {! System.out.println(“Escriba un num positivo”);! Scanner sc = new Scanner(System.in);! respuesta = sc.nextInt();!} while (respuesta < 0);!!!!
for
! Estructura diseñada para facilitar el control de flujo cuando se conoce el número de repeIciones
! Consta de tres partes: ! declaración e inicialización de variables ! expresión booleana (la condición) ! expresión de control de la iteración
for ( inicialización; Condición; iteración ) {!
sentencia1;!
sentencia2;!
} !
24/01/12
5
Ejemplo for (int i = 0; i<10; i++) { ! System.out.println("i vale " + i); !} !!//Equivale a!!int i=0;!while (i<10) {! System.out.println(“i vale ” + i);! i++;!}!
for: Inicialización
! Es lo primero que ocurre en el bucle
! Permite declarar e inicializar una, ninguna o varias variables for (int i = 0; i<10; i++) {}!int i=0; !
for (; i<10; i++) {} // No se declaran variables
! Si se declara más de una hay que separarlas con comas
for (int i=0, j=4; i<10; i++) {}
! Las variables declaradas aquí sólo pueden ser uIlizadas dentro del bucle
for (int i = 0; i<10; i++) {}!
System.out.println(i); // ERROR i no es visible!
for: Condición
! Como otras expresiones condicionales Iene que devolver un valor booleano
! Sólo puede haber una expresión booleana pero puede ser muy compleja
for (int x = 0; ((((x < 10) && (y-- > 2)) || x == 3)); x++) {}!
for (int x = 0; (x > 5), (y < 2); x++) { } //ERROR!
for: Iteración
! Se ejecuta siempre después del bloque de sentencias del for ! Salvo que exista un salida forzada: exit, return, break (ya se verá)
! Se pueden incluir varias sentencias ! separadas por comas
! Puede incluir cualquier Ipo de sentencia ! No sólo de incremento
for (int x = 0; x<10; x++, System.out.println(x)){}
Ejemplos
for ( int i = 100; i >= 1; i-- ) {!
System.out.println(i);!
}!
for ( int i = 7; i <= 77; i += 7 ) {!
System.out.println(i);!
}!
int suma=0;!
for ( int i = 0; i < 10; i++, suma += i ) {} !
Top Related