Vous êtes sur la page 1sur 13

Lenguaje Java

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

Ejercicio Estr. Condicionales


• Realizar una aplicación que permita calcular el precio de un seguro teniendo
en cuenta lo siguiente:
– En el calculo de la tarifa hay que considerar: el sexo del conductor (hombre (h) o
mujer (m)), el tiempo transcurrido desde el último parte y que existen tres tipos
de coches, grandes(g), medianos(m) y pequeños(p),
– Los descuentos aplicables son:
• Si el coche es pequeño y el tiempo transcurrido desde el último parte es de al menos
cinco años :15%, de lo contrario el descuento es igual al 10%.
• Si el coche es mediano y el conductor es mujer: 16%; si el conductor es hombre y el
tiempo desde el último parte es de al menos tres años: 17%; si el tiempo transcurrido
desde el último parte es inferior a tres años: 10%.
• En los coches grandes con un tiempo transcurrido desde el último parte de al menos
siete años :20%; si el tiempo es inferior y el conductor es una mujer, se aplicará el
10% de descuento y si el conductor es hombre un 8%.
– La tarifa base de los seguros es:
• coche pequeño: 75.000ptas.
• coche mediano: 100.000ptas.
• coche grande : 150.000ptas.
JMPL 10

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

– Se evalúa la expresión y si es verdadera, se ejecuta la


sentencia/s mientras la expresión siga siendo verdadera.
– Se utiliza cuando la sentencia tiene que ejecutarse 0 o varias
veces
– Si hay varias sentencias irán entre llaves { }

Ejercicio. Escribir la tabla de multiplicar de un número


Ejercicio. Calcular la suma de los números entre N y 0

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);
}
}

Ejercicio: Modificar el programa anterior para que funcione también si se


dan números negativos (si se recibe el –3 muestre –3, -2, -1 0

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);

– Se ejecuta la sentencia/s y después se evalúa la expresión,


mientras ésta sea verdadera se seguirá ejecutando la
sentencia/s
– Se utiliza cuando la sentencia tiene que ser ejecutada al
menos 1 vez
– Si hay varias sentencias irán entre llaves { }

Ejercicio. Escribir los números del N al 0, ambos incluidos


Ejercicio. Calcule la suma de los dígitos de un número
entero

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

Vous aimerez peut-être aussi