Estructura de control condicional compuesta (if-else)

La estructura condicional se utiliza para tomar decisiones, es una estructura secuencial donde se toma una decisión “ir” para ejecutar entre dos alternativas de código que siempre se encuentran hacia adelante.

Como puede observarse en el diagrama, la parte de la sentencia «else» es opcional y por lo tanto puede omitirse, si no se agrega es conocida como «condicional simple». Pero si cuenta con ambas partes se conoce como condcional compuesta o simplemente if-else.

Diagrama de flujo

Al llegar a la estructura se evalua una expresión booleana. Si se cumple la condición se procede a ejecutar el bloque de sentencias ubicado en la primera sentencia (nula, simple o compuesta), en caso contrario se omite estas instrucciones y ejecuta el segundo bloque de sentencias. En ambos casos, al terminar la sentencia (if-else) continuan en la siguiente sentencia que sigue fuera de la estructura.

esquema

Diagrama sintáctico

La condicional simple, que incluye else, puede representarse con el siguiente diagrama sintáctico:

esquema

Se escribe la palabra reservada if y en medio de dos paréntesis la «expresión booleana» que se evaluará, después se coloca la sentencia (nula, simple o compuesta) que se ejecuta si el resultado es verdadero. Después se escribe la palabra else, seguida por la sentencia (nula, simple o compuesta) para el caso contrario, cuando la «expresion booleana» es falsa.

Codificación en Java

if-then con sentencias simples:

if( expresión_booleana )

sentencia; // si expresión_booleana == true

else

sentencia;

Las sentencias puede ser compuestas o un bloques:

if( expresión_booleana ) { // si expresión_booleana == true

sentencia;

sentencia;

sentencia;

}

else { // si expresión_booleana == false, o “en caso contrario”

sentencia;

sentencia;

sentencia;

}

Ejemplos

Si el Sistema de unidades es METRICO el método debe indicar que las unidades son kilogramos y si no, indicar que son libras.

public String getUnidades() {

if( sistema = Sistema.METRICO )

return "Kg";

else

return "Lb";

}

Si se desea asignar a la base un valor positivo, tomarlo tal cual, si no cambiarle el signo:

if( valor>=0 )

base = valor;

else

base = -valor;

Ejemplo de diagrama sintáctico

Después de una partida muy intensa en un videojuego con dos participantes, hay un ganador. El marcador se mostrará en la pantalla indicando el nombre del ganador.

Diagrama sintáctico

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Palabras reservadas

Inicia la primera parte del bloque correspondiente a los símbolos terminales de if():

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Expresión booleana

Se escribe la expresión booleana:

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Sentencia true

Se escribe la sentencia, al final debe agregarse el terminador (punto y coma) de sentencia por tratarse de una sentencia simple:

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Palabra reservada else

Inicia la segunda parte del bloque correspondiente al símbolo terminal else:

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Sentencia false

Se escribe la sentencia, al final debe agregarse el terminador (punto y coma) de sentencia por tratarse de una sentencia simple:

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Al llegar a la estructura se evalúa una expresión booleana. Si se cumple la condición se procede a ejecutar el bloque de sentencias ubicado en la primera sentencia (nula, simple o compuesta), en caso contrario se omite estas instrucciones y ejecuta el segundo bloque de sentencias. En ambos casos, al terminar la sentencia (if-else) continuan en la siguiente sentencia que sigue fuera de la estructura.

Ejercicios de codificaciones

Observa el ejemplo y completa los ejercicios.

Ejemplo

Codifica el siguiente diagrama de flujo:

Diagrama de flujo

La estructura completa aparece en el siguiente diagrama:

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Identificación de la estructura

Se trata de una condicional doble o compuesta, ya que es una decisión con dos flujos que avanzan por rutas distintas y se unen en un punto adelante del programa.

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Decisión

La expresión booleana aparece dentro del rombo, se codifica dentro de los paréntesis de la condición.

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Flujos de sentencia true

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Flujos de sentencia false

esquema

if( jugador1.getPuntos()>jugador2.getPuntos() )

System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );

else

System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );

Ejercicio de arrastrar

Al implementar un método setter para cambiar el valor de la base de un triángulo, se decide implementar un algoritmo que se representa en un diagrama de flujo. Si se detecta que el parámetro value es negativo se cambia el signo.

esquema
esquema
esquema
Ejercicio de escritura

1

Completa los espacios en blanco para que el siguiente diagrama de flujo corresponda con la codificación en Java.

esquema

discr = b*b - 4*a*c;

if( discr>=0 )

System.out.println( "raíces reales" );

else

System.out.println( "raíces complejas" );

2

La estatura de una persona adulta debe estar en metros para poder calcular su indice de masa corporal. Se considera que normalmente las estaturas se ubican entre 1.20 y 2.20 metros, sin embargo, los capturistas suelen introducir la cantidad en centímetros así que en el método getter decidió hacer una corrección si se detecta que los dato vienen en centímetros. En caso contrario asignar el valor proporcionado.

public void setEstatura(double value) {

if ( (120 <= value) && (value <= 220) )

estatura = value / 100; // convertir de centímetros a metros

else

estatura = value; // se asume que el valor es correcto

this.calcularIMC();

}

3

Si el índice de masa corporal de una persona adulta no se ubica entre 20 y 25, el programa debe indicarle que consulte a su médico, en caso contrario, se sigiere que continue igual.

System.out.println( "Su indice de masa corporal es:" + persona.getIMC() );

System.out.println( "Su IMC se interpreta como:" + persona.geInterpretación IMC() );

if( persona.getIMC()>=20 && persona.getIMC()<=25 )

System.out.println( "Continua cuidando tu salud" );

else

System.out.println( "Consulta a tu médico" );