Académique Documents
Professionnel Documents
Culture Documents
Control de Flujo
JMPL 1
Control de Flujo
• Lineales
• Condicionales
• Bucles
JMPL 2
1
Instrucciones de Ejecución Lineal
• Ejecución de una serie de sentencias una detrás de otra, sin posibilidad
de variar el comportamiento del método en función de los datos (salvo
la ofrecida por el polimorfismo o el ligamiento dinámico)
• Sentencias y Bloques
– Sentencias de expresión
• Exp. de asignación (las que contienen = )
• Formas prefijas o postfijas de ++ y --
• Llamadas a métodos
• Expresiones de creación de objetos (new)
– Bloques de instrucciones
• Las llaves permiten agrupar sentencias en bloques. Se pueden
usar bloques en cualquier sitio para agrupar sentencias
JMPL 3
Instrucción Condicional
if-else
• Sintaxis:
if ( expresión_lógica ) sentencia1;
[ else sentencia2 ; ]
o
if ( expresión_lógica ) {bloque1}
[ else {bloque2} ]
– Si la expresión_lógica es verdadera se ejecuta la
sentencia1 o el bloque1
si es falsa se ejecuta la sentencia 2 o el bloque 2
JMPL 4
2
Ejemplo if-else
class Ruleta {
int númeroGanador;
boolean ganaPar(){
if ( númeroGanador%2 == 0 ) {
System.out.println("Ha salido par");
return true;
}
else {
System.out.println("Ha salido impar");
return false;
}
}
}
JMPL 5
Instrucción Condicional:switch
switch (expresión_de_tipo_simple ) {
case valor1:[sentencia_1_1;]
[sentencia:1_2;]
...
[break;]
case valor2:[sentencia_2_1;]
...
[break;]
. . .
case valorN:[sentencia_N_1;]
...
[break;]
[default: [sentencia_D_1;]
… ]
}
JMPL 6
3
Instrucción Condicional:switch
• El tipo de la expresión debe ser uno de los tipos simples (int, long, short,
byte, char). No puede ser un valor lógico porque los valores true y false
no tienen su correspondiente numérico.
• Los valores de la selección múltiple (valor1, valor2,…) tienen que ser
constantes, se evalúan en tiempo de compilación.
• Si la expresión de tipo toma el valor1 se ejecutan las sentencias 1_X,
Si toma el valor2 se ejecutan las sentencias_2_X, etc.
Si no toma ninguno de los valores indicados y se pone el bloque default
(que es opcional) se ejecutarán las instrucciones del mismo.
• Si alguna de las opciones no contiene el break correspondiente, la
ejecución prosigue con las sentencias del siguiente case (conviene indicar
con un comentario que los case vacíos continúan en el que les sucede).
JMPL 7
Ejemplo switch
void seleccionar(int opcion){
switch (opcion){
case 1: case 2:
metodo1();
break;
case 3:
metodo2();
break;
case 4:
metodo3();
break;
default:
metodo4();
}
} JMPL 8
4
Ejemplo switch
class Ejemswitch{
public static void main (String []args){
int n=0,x=1;
switch (x) {
case 1: n++;
case 2: n++;
case 3: n++;
default : n++;
}
System.out.println ("N:"+n); //n vale 4
}
}
JMPL 9
5
Instrucciones Iterativas I
• Permiten ejecutar varias veces un mismo bloque de
sentencias.
• Suelen constar de varias partes
– Inicialización de las variables
– Una expresión condicional para expresar la condición
de terminación del bucle.
– La realización de las acciones que se van a ejecutar en
cada iteración entre las que habrá, al menos una que
modifique el valor de las variables que controlan la
condición del bucle.
Existen 3 tipos de bucles:
• while
• do while
• for
JMPL 11
Bucle while
• while
while (expresion-booleana)
sentencia
JMPL 12
6
Ejemplos while
Escribir los números del N al 0, ambos inclusive, para cualquier N positivo:
class EjemWhile{
void numeroInversos(int n) {
while (n >= 0){
System.out.println( "n=" + n);
n--;
}
}
public static void main (String []args)
EjemWhile obj=new EjemWhile();
obj.numeroInversos (5);
}
}
JMPL 13
import java.io.*;
class EjemWhile{
Ejemplos while: Leer Nº
int leerNumero() throws IOException{
char c;
int numero=0;
c= (char) System.in.read();
while (c>='0' && c<='9'){
numero=((int)c-(int)'0')+10*numero;
c=(char) System.in.read();
}
return numero;
}
public static void main (String []args) throws IOException{
EjemWhile obj=new EjemWhile();
int numero=obj.leerNumero();
System.out.println ("Numero="+numero);
}
} JMPL 14
7
Bucle do-while
do
sentencia
while (expresion-booleana);
JMPL 15
Ejemplos do-while
Escribir los números del 1 al 10
class EjemDoWhile{
void escribir1al10() {
int n=1;
do{
System.out.println (n);
n++;
} while (n<=10);
}
public static void main (String []args) {
EjemDoWhile obj=new EjemWhile();
obj.escribir1al10();
}
}
JMPL 16
8
Ejemplos do-while: Leer Nº
import java.io.*;
class EjemDoWhile{
int leerNumero() throws IOException{
char c='0';
int numero=0;
do{
numero=((int)c-(int)'0')+10*numero;
c= (char) System.in.read();
} while (c>='0' && c<='9');
return numero;
}
public static void main (String []args) throws
IOException{
EjemDoWhile obj=new EjemDoWhile();
int numero=obj.leerNumero();
System.out.println ("Numero="+numero);
}
}
JMPL 17
Bucle for
• for ([expr-inic]; [expr-booleana];
[expr-incr])
sentencia;
– expr-inic: expresiones de inicialización, se ejecuta sólo 1 vez antes de
comenzar el bucle
– expr-incr: expresión de incremento, se ejecuta una vez después de cada
iteración y antes de comprobar la expr-booleana
– expr-booleana: condición de finalización del bucle cuando toma valor
falso, Si se omite expr-booleana, se supone true, Se evalúa, después de la
inicialización y antes de comenzar la siguiente iteración
– expr-inic y expr-incr pueden ser compuestos (separados por coma)
Ejercicio. Mostrar en pantalla los números del 10 al 1 en orden de
mayor a menor
Ejercicio. Calcular la suma de los números enteros entre 1 y 100 ambos
inclusive
JMPL 18
9
Equivalencia for--while
for
(inicialización;condición;inst_bucle) {
cuerpo;
}
inicialización;
while (condición) {
cuerpo;
inst_bucle;
}
JMPL 19
Ejemplos for
Imprimir los cuadrados de los números enteros del 1 al 10 ambos inclusive:
class Cuadrado{
public static void main (String []args){
int cuad;
for (int i=1;i<=10; i++) {
//int cuad;Si la declaro aquí se crea varias veces
cuad=i*i;
System.out.println ("Num:"+i+"cuadrado="+cuad);
}
}
}
JMPL 20
10
Ejemplos for
class Cuadrado{
void trianguloImpares (int N){ /*Salida
int i,j; 1 10
for (i=1; i<=N; i=i+2){
29
for (j=1; j<=i; j=j+2)
System.out.print(j+" "); 38
System.out.println(); 47
}
56
}
public static void main (String []args){ 1
Cuadrado c=new Cuadrado(); 13
for (int a=1, b=10; a<b; a++, b--) 135
System.out.println("a =" + a + ", b =" + b);
c.trianguloImpares(9); 1357
} 13579
} */
JMPL 21
Ejercicios
• Dado el bucle for :
for (i=1; i<10; i++)
System.out.println (i);
transformarlo en un bucle while
• Indicar el número de dígitos pares de un número.
• Calcular el factorial de un número
• Escribir la tabla de caracteres ASCII.
JMPL 22
11
Ejercicios
• Prog. que lea números hasta que se de un 0 y de el mayor.
• Método que indique si un número es o no primo
• Prog. que calcule el valor del termino N de la serie de
fibonacci, en la que cada termino se obtiene sumando los 2
anteriores excepto el primero que es un 0 y el segundo que es
un 1: 0,1,1,2,3,5,8,13….
• Prog. Que lea números hasta que se de un 0 y de los 3
mayores.
• Prog. que lea 2 números y escriba los números pares entre
ambos que no sean el cuadrado ni el cubo de números entre 0
y 100. Ejem para 6, 18 mostrará: 6, 10,12,14,18
JMPL 23
Rupturas de control
• Etiquetas (No Utilizar)
etiqueta: sentencia;
– Son útiles con break y continue
• break
– Para salir de cualquier bloque
– Un break sin etiqueta termina el switch, for.
while o do while más interno
– Un break etiqueta, lleva el control hasta la
sentencia externa etiquetada
Ejercicio. Meses.java. Recorrer los enteros hasta 20 e
imprimir el mes correspondiente al entero.
JMPL 24
12
Rupturas de control
• continue
– Salta ala siguiente iteracción del bucle y
evalúa la expresión booleana que controla
dicho bucle
– Válido para do, do-while y for
• return
– Termina la ejecución de un método,
devolviendo el control al invocador
– return [expresión]
JMPL 25
13