Java
- 1. Representación de Datos y Aplicaciones
Representació
Tema 6
Estructuras de control (I)
Natividad Martínez Madrid
Martí
nati@it.uc3m.es
Objetivos del tema 6
● Aprender a diseñar algoritmos sencillos para la
solución de problemas
● Aprender a representar de forma abstracta los
algoritmos en forma de organigrama
● Conocer las estructuras de control de tipo
selección proporcionadas por Java y saber
aplicarlas correctamente
● Ser capaces de elegir la estructura de selección
adecuada a cada situación
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 2
1
- 2. Contenido del tema 6
● Conceptos básicos del flujo de control
● Secuenciación de sentencias
● Sentencia simple y sentencia compuesta
● Estructuras de selección simple y múltiple
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 3
Conceptos básicos del flujo de control
● Dentro del cuerpo de los métodos se ejecutan
sentencias (instrucciones) que determinan el
comportamiento del programa
● Dichas sentencias se ejecutan en secuencia
― Cada sentencia termina con un punto y coma
● Las sentencias que hemos visto hasta ahora
eran sencillas (asignación o return)
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 4
2
- 3. Secuenciación de sentencias
sentencia1
sentencia2
sentencia3
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 5
Bloque de sentencias
● Un bloque de sentencias (o sentencia
compuesta) es un número de sentencias Java
simples rodeadas por llaves
― Los bloques definen un ámbito de variables
― Los bloques pueden anidarse
void metodo() { void metodo() {
int n; int n;
... ...
{ int k; { int k;
... int n; Error
} ...
... }
} ...
}
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 6
3
- 4. Sentencias de control
● Los lenguajes de programación proporcionan
sentencias de control que permiten
― Ejecución opcional de un bloque de sentencias
― Ejecución repetida de un bloque de sentencias
● De esta forma, se pueden implementar
algoritmos para calcular los valores resultantes
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 7
Estructuras de selección
● Las estructuras de selección permiten, en
función del valor lógico de un selector, ejecutar
un bloque de sentencias u otro
● Tipos de sentencias de selección:
― Sentencia if / if-else
― Sentencia switch
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 8
4
- 5. Sentencia if
● La sentencia if es la sentencia básica de
selección
if (condición) {
bloque de sentencias
}
● donde
― condición es una expresión booleana
― sentencias representa un bloque de sentencias o
una sentencia única
Si es una sentencia única, se pueden quitar las llaves
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 9
Diagrama de la sentencia if
Este tipo de diagramas se llaman organigramas y
representan el flujo de control de una parte del programa
condición false
true
sentencias
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 10
5
- 6. Significado de la sentencia if
● Si la condición es cierta (si el valor de la
expresión es true) se ejecutará el bloque de
sentencias asociado
● Si la condición es falsa, dicho bloque de
sentencias no se ejecutará
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 11
Ejemplo: Sentencia if
public class Alumno {
String nombre;
int año;
String grupo;
public Alumno (String nombre, int año) throws Exception {
if (nombre == null)
throw new Exception (“Nombre vacío”);
if (año < 0)
throw new Exception (“Año incorrecto”);
this.nombre = nombre;
this.año = año;
}
}
¿Cuál sería el organigrama de este constructor?
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 12
6
- 7. Sentencia if - else
● Opcionalmente, se puede añadir una parte else
a la sentencia if
● Indica otro bloque de sentencia a ejecutar si la
condición es falsa
if (condición) {
sentencias1
} else {
sentencias2
}
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 13
Diagrama de la sentencia if - else
false true
condición
sentencias2 sentencias1
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 14
7
- 8. Ejemplo: Sentencia if - else
public class IfElse {
public void pruebaIfElse (int a, int b) {
if (a>b) {
System.out.println(“El número mayor es “ + a);
} else {
System.out.println(“El número mayor es “ + b);
}
}
public static void main (String[] args) {
IfElse ie = new IfElse();
ie.pruebaIfElse(3,7);
ie.pruebaIfElse(7,6);
}
}
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 15
Ejercicio: if-else
● Escribid un método:
boolean aprueba (float nota)
que, dada una nota, determine si el examen está
aprobado o no
― Pintad primero el organigrama
― Después codificad el método
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 16
8
- 9. Sentencia if anidada
● Las sentencias if se pueden anidar
― También las otras sentencias de control que veremos
a continuación
● Dentro del bloque de sentencias del if (o de los
bloques de if-else) puede encontrarse otra
sentencia if
● Importante
― A qué if corresponde cada else
― Cuál es el estado del programa en cada punto
― ¡Una buena indentación!
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 17
Ejemplo: Sentencia if anidada
if (i == 10) {
if (j < 20) a = b;
if (k > 100) c = d;
else a = c;
} ¿A qué ifs pertenencen?
else a = d;
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 18
9
- 10. Sentencia if-else-if
● Habitual cuando hay más de una condición
― Basada en los if anidados, se anidan en la parte del else
if (condición1) {
sentencias1
} else if (condición2) {
sentencias2
} else if (condición3) {
sentencias3
}
...
else {
sentenciasElse
}
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 19
Diagrama de la sentencia if-else-if
true
condición1
false sentencias1
true
condición2
false sentencias2
condición3 true
false
sentenciasElse sentencias3
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 20
10
- 11. Ejemplo: Sentencias if-else-if
class Meses {
private int mes;
public String dameEstacion() {
String estacion
if (mes == 12 || mes == 1 || mes == 2)
estacion = “Invierno”;
else if (mes == 3 || mes == 4 || mes == 5)
estacion = “Primavera”;
else if (mes == 6 || mes == 7 || mes == 8)
estacion = “Verano”;
else if (mes == 9 || mes == 10 || mes == 11)
estacion = “Otoño”;
return estacion;
}
...
}
● ¿Cómo se puede mejorar el método?
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 21
Ejercicio: Sentencia if-else-if
● Se desea escribir un método en la clase Ciudadano que
calcule si una persona cumple las condiciones para ser
residente en España. Suponed que, para ser residente,
se debe cumplir al menos una de las siguientes
condiciones:
― Ser de nacionalidad española
― Ser estudiante matriculado en algún estudio oficial
― Ser menor de 18 años y que al menos uno de los padres sea
residente
― Ser ciudadano de la EU y tener trabajo o que el cónyuge sea
residente
― Ser extranjero y que el cónyuge sea residente
● Podéis diseñar los atributos de la clase Ciudadano
necesarios
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 22
11
- 12. Sentencia switch
● Estructura de selección múltiple
● Selección de bloques de sentencias entre múltiples casos
― Dependiendo del valor de una expresión entera
switch (expresion) {
case valor1:
sentencias;
break;
case valor2:
case valor3:
sentencias;
break;
…
default:
sentencias;
break;
}
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 23
Caraterísticas switch
● Puede haber default o no
● Si un bloque contiene un break, se continua con
la sentencia siguiente al switch
● Si no, continúa comprobando los siguientes
valores, o va al default
● Los valores tienen que ser una expresión
constante
― Conocida en tiempo de ejecución
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 24
12
- 13. Ejemplo sentencia switch
public class DiasDelMes
public static void main (String[] args) {
int dias;
int mes; = 8;
switch (mes) {
case 4:
case 6:
case 8:
case 10:
dias = 30;
break;
case 2:
dias = 28;
break;
default;
días = 31;
break;
}
System.out.println(“El mes “ + mes +
“ tiene “ + dias + “ días.”);
}
}
Tema 6: Estructuras de control (I)
Representación de Datos y Aplicaciones © Natividad Martínez Madrid 25
13