Documente Academic
Documente Profesional
Documente Cultură
Fundamentos de Programación
FPRG
Tema 6. Estructuras de Control
v. 2.0
Miguel A. de Miguel
mmiguel@dit.upm.es
Temario
n Tema 6. Estructuras de
control
n Alternativas if y switch
n Repetitivas: while, do, for
n Rupturas de bucle: break,
continue
n Tipos Compuestos
n Excepciones:
n Concepto
n Creación
n Levantamiento
n Captura
n Excepciones en lo métodos
Fundamentos de Programación 2
1
03/11/16
Ejecución secuencial
n Los programas ejecutan secuencias de
sentencias
n El final de una secuencia:
n ; para llamadas simples de método y asignaciones
n El final del cuerpo de una sentencia de control
n Terminada una sentencia se ejecuta la siguiente
n Las sentencias de control están determinadas
por palabras reservadas: if, for, while …
Fundamentos de Programación 3
Alternancia if
n Estructura general
if (expresion boolean) cuerpo-then
else cuerpo-else
Fundamentos de Programación 4
2
03/11/16
Bloques de sentencias
n Los cuerpos de las sentencias de control pueden
ser:
n Bloques de varias sentencias entre llaves
n Una única sentencia
n Usamos llaves cuando el cuerpo es mas de una
sentencia
n Esto delimita el final del cuerpo
n Nos determina donde comienza la primera sentencia
que sigue a la sentencia de control
Fundamentos de Programación 5
Condiciones
n La condición es una expresión boolean
n Operaciones relaciones
n Operaciones lógicas
n Variable boolean
n Métodos que devuelven boolean
n Debemos evitar expresiones que creen efectos
laterales (modificar objetos)
n Algunas veces las expresiones no se ejecutan
completamente
n Basta con ejecutar una parte para saber si es true o
false
n expresion1 && expresion2 expresion3 || expresion4
Fundamentos de Programación 6
3
03/11/16
Partes else
n Cuando el cuerpo de una sentencia if es otra
sentencia if, el else hace referencia al if mas
próximo
if (condicion1) if (condicion2) sentencia1
else sentencia2
n Bloques vacíos
if (condicion1)
if (condicion2) sentencia1
else {}
else sentencia2
Fundamentos de Programación 7
Alternancias múltiples
n Tratamos los diferentes valores de una
expresión de formas distintas
if (expresion == valor0) sentencia0;
else if (expresion == valor1) sentencia1;
else if (expresion == valor2) sentencia2;
else if (expresion == valor3) sentencia3;
else sentencia4;
Fundamentos de Programación 8
4
03/11/16
Alternancia switch
switch (expresion) {
case valor0:
sentencia0; break;
case valor1:
sentencia1; break;
case valor2:
sentencia2; break;
default:
sentencia4;
}
n expresion debe ser entero, boolean, carácter,
enumerado o String
n La misma alternancia no puede estar repetida
n Los valores de case son constantes o literales
n default es opcional
n La sentencia break nos saca del switch, si no la
incluimos se ejecuta lo que sigue
Fundamentos de Programación 9
Alternancia switch
public class Anio {
public enum Meses {ENERO, FEBRERO, MARZO, ABRIL, MAYO, JUNIO, JULIO,
AGOSTO, SEPTIEMBRE, OCTUBRE, NOVIEMBRE, DICIEMBRE}
public static void main(String[] args) {
Meses mes = Meses.valueOf(args[1]);
int anio = Integer.parseInt(args[0]);
int numDias = 0;
switch (mes) {
case ENERO: case MARZO: case MAYO: case JULIO:
case AGOSTO: case OCTUBRE: case DICIEMBRE:
numDias = 31; break;
case ABRIL: case JUNIO: case SEPTIEMBRE: case NOVIEMBRE:
numDias = 30; break;
case FEBRERO:
if ((new Anio(anio)).esBisiesto())
numDias = 29;
else
numDias = 28;
break;
default:
numDias=0; break;
}
System.out.println("Numbero de dias = " + numDias);
}
Fundamentos de Programación 10
5
03/11/16
Alternancia switch
private int numeroAnio;
public Anio(int valor) { numeroAnio=valor; }
Fundamentos de Programación 11
Bucle while
n Estructura general
while (expresion boolean) cuerpo-while
6
03/11/16
Bucle do-while
n Estructura general
do {
cuerpo-do
} while (expresion boolean)
Bucle for
n Estructura general
for (inicializacion; condicion; actualizacion) {
cuerpo-for
}
n inicializacion se ejecuta una sola vez al llegar al
bucle. Puede incluir declaración de variables
que afectan al cuerpo
n Mientras condicion (expresión boolean) se
cumpla el cuerpo se ejecuta. Al menos se
evalúa después de inicializacion
n Después de terminar el cuerpo, y antes de
evaluar condicion se ejecuta actualizacion
for (int i=0; i < 20; i=i+1) m=m+i;
Fundamentos de Programación 14
7
03/11/16
Ejercicio
Escriba una clase que permita calcular el número PI con
una precisión de "n" decimales. El parámetro "n" deberá
introducirse por teclado:
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
String entrada = stdin.readLine();
int dig=Integer.parseInt(entrada);
Fundamentos de Programación 15
8
03/11/16
Ejercicio
Escriba el cuerpo de un método “complementario” con la
siguiente cabecera:
boolean[][] complementario(boolean[][] matriz) {
…
}
Fundamentos de Programación 18
9
03/11/16
Excepciones
n En cualquier programa se producen
comportamientos anómalos y errores
n Correcto: Sin errores y capaz
Correcto
de cumplir requisitos
n Robusto: Capaz de funcionar
Robusto
incluso en situaciones anormales
n La detección y control de errores hacen los
programas mas difíciles de entender
if (!error1) {
sentencias con error2
if (!error2) {
sentencias
else tratamiento de error2
else tratamientoFundamentos
de error1de Programación 19
Error Exception
MisExcepcionesChequeadas RuntimeException
ExcepcionesSinChequeos
Fundamentos de Programación 20
10
03/11/16
Levantamiento de Excepciones
n Estructura general
throw ObjetoDeTipoExcepcion;
n Aborta lo que se ejecuta y se cede el control a
hizo la llamada
Fundamentos de Programación 21
11
03/11/16
Levantamiento de Excepciones
while (x > 0) {
switch x/n {
case 0 : t=t+” cero”; break;
case 1 : t=t+” uno”; break;
:
case 9 : t=t+” nueve”; break;
default:
throw new Exception(“Algo va mal”);
break;
}
x=x%n;
n=n/10;
}
Fundamentos de Programación 23
throw
n Solo esas clases pueden aparecer en la parte exception
de los métodos
n Solo esas clases pueden aparecer en los catch de los
manejadores de excepción
new Exception(“mesaje de error”);
new ClaseExcepcion(parametrosError);
Fundamentos de Programación 24
12
03/11/16
Manejadores de Excepciones
n Estructura general
try { cuerpo-try
} catch (ClaseExcepcion1 ref1) { tratamiento ClaseExcepcion1
} catch (ClaseException2 ref2) {tratamiento ClaseExcepcion2
} finally { cuerpo finally
}
n cuerpo-try representa la ejecución en condiciones normales
Manejadores de Excepciones
n Cuando llamamos a un método que levanta una excepción
debemos:
n Incluir la llamada dentro de un try que tiene asociado el tratamiento
de ese tipo de excepción
n El método que incluye la llamada debe indicar que él también puede
levantar la llamada
n Formas de tratar un error:
n El try-catch cortan la excepción pero debe darle un tratamiento y
buscar una solución a ese tipo de error
n Los métodos pasan el error a sus llamadores
n Si ningún método contiene un manejador que trate la excepción, se
aborta la ejecución y la máquina virtual saca un mensaje como:
mesaje de error
at nombreClase1.nombreMétodo1 (nombreFichero1.java:numeroLínea)
at nombreClase2.nombreMétodo2 (nombreFichero2.java:numeroLínea)
at nombreClase3.nombreMétodo3 (nombreFichero3.java:numeroLínea)
:
Fundamentos de Programación 26
13
03/11/16
Ejemplo
public static void main (String[] arg) {
try {
double d= Double.parseDouble(arg[0]);
if (d < 0)
throw new Exception(arg[0]+“ no puede ser negativo”);
System.out.println(Math.sqrt(d));
} catch (NumberFormatException e) {
System.err.println(arg[0]+” no es un número real”);
} catch (Exception e) {
System.err.println (e);
}
}
}
Fundamentos de Programación 27
Ejemplo
class CuentaBancaria {
public enum EstadoCuenta {Activa, Cerrada, Bloqueada}
private double saldo=0.0;
private EstadoCuenta estado=EstadoCuenta.Activa;
Fundamentos de Programación 28
14
03/11/16
Ejemplo
public void transferencia(double cantidad, CuentaBancaria destino)
throws Exception {
retirar(cantidad);
try destino.depositar(cantidad));
catch (Exception e) {
depositar(cantidad); // devolvemos lo retirado
throw e;
}
}
}
Fundamentos de Programación 29
15