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.
Diagrama sintáctico
La condicional simple, que incluye else, puede representarse con el siguiente diagrama sintáctico:
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
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():
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:
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:
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:
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:
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.
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:
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.
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.
if( jugador1.getPuntos()>jugador2.getPuntos() )
System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );
else
System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );
Flujos de sentencia true
if( jugador1.getPuntos()>jugador2.getPuntos() )
System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );
else
System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );
Flujos de sentencia false
if( jugador1.getPuntos()>jugador2.getPuntos() )
System.out.println( "Felicidades "+jugador1.getNombre()+", ganaste!" );
else
System.out.println( "Felicidades "+jugador2.getNombre()+", ganaste!" );
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.
1
Completa los espacios en blanco para que el siguiente diagrama de flujo corresponda con la codificación en Java.
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.
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.