Tema 8. Estructuras decontrol: Seleccion
Introduccion a la Informatica y a la Programacion (IIP)
Curso 2011/2012
Departamento de Sistemas Informaticos y Computacion
Indice
1 Introduccion y motivacion . 3
2 Revision de condicionales . 5
3 Instrucciones condicionales . 7
• Instruccion if-else• Instruccion switch
4 El operador ternario condicional . 18
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.2
Introduccion y motivacion
Hasta ahora hemos considerado el codigo simplemente como una secuenciade instrucciones.
Sin embargo, la mayor parte de los problemas reales necesitan tomar deci-siones segun la situacion, y con ello elegir entre distintas subsecuencias deinstrucciones.
Las estructuras de control permiten cambiar el flujo simple de instruccionespara conseguir estas caracterısticas.
En un metodo, las decisiones se toman generalmente en funcion de los datosde entrada. La secuencia de instrucciones puede cambiar dependiendo de losdatos de entrada o los datos intermedios generados durante la ejecucion.
En este tema presentaremos los mecanismos que ofrece el lenguaje Java paratomar decisiones.
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.3
Introduccion y motivacion
Las instrucciones condicionales pueden ser sencillas o anidadas:
if (temp>100)System.out.println("Temperatura mayor que 100");
else System.out.println("Temperatura menor o igual que 100");//.....
if (temp>100)System.out.println("Mayor que 100");
else if (temp>50)System.out.println("Mayor que 50, menor o igual que 100");
else System.out.println("Menor o igual que 50");System.out.println("Continuamos aqui");. . ...
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.4
Revision de condicionales
La mayorıa de las estructuras de decision dependen de expresiones logicas(boolean).
Las expresiones logicas se construyen a partir de expresiones numericasempleando operadores relacionales y a partir de otras expresiones logicasusando operadores logicos.
Una expresion logica es toda aquella expresion que se evalua a cierto(true) o falso (false).
Operadores condicionales
Operador Operacion
== Igual a!= Diferente a> Mayor que>= Mayor o igual que< Menor que<= Menor o igual que
Operadores logicos
Operador Operacion
! NOT& AND| OR^ XOR&& AND cortocircuitado|| OR cortocircuitado
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.5
Revision de condicionales
Tabla de verdad
x y x && y x || y x ^ y !xx & y x | y
false false false false false truefalse true false true true truetrue false false true true falsetrue true true true false false
if ((temp>=15) && (temp<=20)) .....
if ((temp>15) || (temp==15)) .....// similar a (temp>=15)
if ((temp>=0) ^ (temp<=100)) .....// similar a (temp>100) || (temp<0)
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.6
Instruccion condicional: if
El condicional mas simple de Java presentaesta estructura:
if (B) S
B es una condicion.
S es cualquier instruccion o bloque de ins-trucciones.
Ejecucion:
1. Se evalua B.
2. Si B es cierto, se ejecuta S.
3. Se continua con la instruccion que sigue alcondicional.
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.7
Instruccion condicional: if
Ejemplo: clase Circulo, metodo setRadio:/** actualiza radio del Circulo a nuevoRadio
solo si nuevoRadio es positivo o cero. */public void setRadio(double nuevoRadio) {
if (nuevoRadio >= 0)radio = nuevoRadio;
}
Ejemplo: datos medicos, segun el sexo, se pregunta si la persona esta embarazadaHumano h = new Humano();// ...System.out.print("Que edad tiene? ");// ...if (h.getSexo()==’M’) {System.out.print("Esta embarazada? ");// ...
}System.out.print("Es alergico a algun medicamento? ");// ...
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.8
Instruccion condicional: if-else
Su forma general es:
if (B) S1 else S2
B es una condicion.
S1 y S2 son cualquier instruccion o conjuntode instrucciones.
Ejecucion:
1. Se evalua B.
2. Si B es cierto, se ejecuta S1.
3. Si B es falso, se ejecuta S2.
4. Se continua con la instruccion que sigue alcondicional.
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.9
Instruccion condicional: if-else
Ejemplo: segun la temperatura, en-cender o apagar el aire acondiciona-do:
Habitacion h = new Habitacion();AireAcon a = new AireAcon();// ...if (h.getTemp()>26.0)
a.encender();else
a.apagar();// ...
Ejemplo: segun la intensidad solar, re-gular la intensidad de las luces:
DetectorSolar d = new DetectorSolar();Bombilla b1 = new Bombilla();Bombilla b2 = new Bombilla();// ...if (d.getIntensidad()<100) {b1.incrIntens();b2.incrIntens();
}else {b1.decrIntens();b2.decrIntens();
}// ...
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.10
Instruccion condicional: if-else
En cualquiera de las formas de las instrucciones condicionales if ...else ...,los bloques de instrucciones pueden incluir otras instrucciones condicionales:instrucciones condicionales anidadas.
Ejemplos:
if (B1)if (B2) S1;else S2;
if (B1)if (B2) S1;
else S2;
if (B1)if (B2) S1;else S2;
elseif (B3) S3;else S4;
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.11
Instruccion condicional: if-else
Ejemplo: gestor de multas de trafico:
// ...if (vehic.getVel()>carr.getMaxVel()) {System.out.println("Velocidad maxima sobrepasada");if (vehic.getVel()>1.2*carr.getMaxVel())vehic.crearMultaEspecial();
elsevehic.crearMultaNormal();
}else {if (vehic.getVel()<carr.getMinVel())vehic.crearMultaNormal();
}// ...
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.12
Instruccion condicional: if-else
Una instruccion if-else se di-ce multiple cuando cada uno delos else tiene asociado un nuevoif-else (excepto el ultimo).
if (B1) S1
else if (B2) S2
else if (B3) S3
...else if (Bn) Sn
else Sn+1
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.13
Instruccion condicional: if-else
Ejemplo completo de uso de condicionales: validar una fecha (metodo validar)
public class Fecha {int dd, mm, aa; // Dia, mes, anyo// ...public boolean bisiesto() { return ((aa%4)==0 && (aa%100)!=0) || (aa%400)==0; }
public boolean validar() {int numdd=31; // Numero de dias del mes
if ((mm<=0) || (mm>12)) return false; // Examina rango del mes// Determinar rango de diasif ((mm==4) || (mm==6) || (mm==9) || (mm==11)) numdd=30;else if (mm==2)
if (bisiesto()) numdd=29; else numdd=28;if ((dd<=0) || (dd>numdd)) return false; // Examina rango del dia
return true;}// ...
}
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.14
Instruccion condicional: switch
switch (expresion) {case val1: [SC1] [break;]case val2: [SC2] [break;]......case valn: [SCn] [break;][default: [SCn+1] [break;]]
}
expresion debe evaluarse a un tipo primitivo (excepto float o double) oa String (desde la version 7.0 de Java).
val1, val2, . . . , valn son valores cuyo tipo de datos es compatible con elde expresion.
SC1, SC2, . . . , SCn+1 son cualquier secuencia de instrucciones.
Los componentes que aparecen entre corchetes ([]) son opcionales.
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.15
Instruccion condicional: switch
Ejecucion:
1. Se evalua expresion.2. Se compara su valor con todos los
valores en los case.3. Cuando es igual a alguno de ellos,
ejecutar las instrucciones desde esepunto incluyendo el codigo asocia-do a otras etiquetas case hasta:
que se encuentre un break, oque se finaliza el bloque switch,
4. Si no es igual a ningun valor, seejecutan las instrucciones asociadasa la etiqueta default (si las hay)hasta el fin del bloque switch.
5. Se continua con la instruccion quesigue al bloque switch.
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.16
Instruccion condicional: switch
Un ejemplo completo: escribir el nombre del mes a partir de su numero:public class Fecha {
int dd, mm, aa; // Dia, mes, anyo// ...
public String nomMes() {String mn;switch(mm) {
case 1: mn=new String("Enero"); break;case 2: mn=new String("Febrero"); break;case 3: mn=new String("Marzo"); break;case 4: mn=new String("Abril"); break;// ...case 12: mn=new String("Diciembre"); break;default: mn=new String("Desconocido");
}return mn;
}// ...
}
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.17
El operador ternario o condicional
Java, al igual que C y C++, posee un operador ternario con un comportamientosemejante a una instruccion condicional.
boolexpr ? expr1 : expr2
donde boolexpr es una expresion logica y expr1 y expr2 son expresionescualquiera, pero del mismo tipo de datos.
Ejecucion:
1. Se evalua boolexpr.
2. Si boolexpr es cierta (true), la expresion completa se evalua a expr1.
3. En otro caso (boolexpr es falsa), la expresion completa se evalua a expr2.
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.18
El operador ternario o condicional
Ejemplo: validacion de fecha usando operador ternario
public class Fecha {int dd, mm, aa; // Dia, mes, anyo// ...public boolean bisiesto() { return ((aa%4)==0 && (aa%100)!=0) || (aa%400)==0; }
public boolean validar() {int numdd=31; // Numero de dias del mes
if ((mm<=0) || (mm>12)) return false; // Examina rango de mes// Determinar rango de diaif ((mm==4) || (mm==6) || (mm==9) || (mm==11)) numdd=30;else if (mm==2) numdd=(bisiesto())?29:28; // Aqui se usa el operador ternario
if ((dd<=0) || (dd>numdd)) return false; // Examina rango de dia
return true;}// ...
}
22 de octubre de 2011 IIP - Curso 2011/2012 Page 8.19
Top Related