Está en la página 1de 4

Sentencia if-else

De Wikilibros, la coleccin de libros de texto de contenido libre.


Programacin en Java/Sentencia if-else
Saltar a: navegacin, buscar
Estructuras de seleccin
Sentencia if-else

Sentencia switch

Queremos realizar una divisin de enteros. Es fcil, ya sabemos cmo hacerlo, utilizando variables y
operadores. Pero nos queda un mal recuerdo con la divisin por cero. Podemos establecer una condicin que
permita la divisin para todos los nmeros y que rechace cualquier divisor con cara de cero. Disponemos de dos
opciones: realizar o no la divisin. Tambin una condicin: el divisor sea distinto de cero. Esto se parece mucho
a una seleccin simple.
La estructura de seleccin simple en Java se realiza mediante la sentencia if (si, en ingles). La sintaxis es la
siguiente:
if (condicin) sentencia;

La condicin es una expresin booleana. La sentencia se ejecuta solamente si la expresin booleana es


verdadera.
Retomando el problema de la divisin, incorporamos una estructura de seleccin para realizar la operacin libre
de ceros.
public class DivisionSegura {
public static void main(String args[]){
int x = 12;
int y = 0;
int z = 0;
if( y !=0 ) z = x / y;
System.out.println("El resultado es : " + z);
}
}

En el programa, la variable x tiene el valor del dividendo, la y el divisor y la z el cociente. La condicin es una
expresin que arroja un valor booleano. En este caso se utiliza un operador relacional que verifica si y es
distinto de 0. Si esta condicin se cumple realiza la divisin. En caso contrario se saltea la divisin y solo
imprime el valor de z, que hemos inicializado convenientemente antes de la operacin.
Qu ocurre si la condicin no se cumple? En este caso nada. Podemos agregar una serie de instrucciones que
se ejecutarn solo si la condicin no se cumple. Para esto tendremos que agregar la sentencia else. La estructura
de seleccin quedar as:
if (condicin) sentencia 1;
else sentencia 2;

Si la condicin es verdadera se ejecuta la sentencia 1 en caso contrario se ejecuta la sentencia 2. Ambas


sentencias nunca se ejecutarn al mismo tiempo, son excluyentes.
Ahora ampliemos el programa para mostrar una advertencia en el caso que se encuentre cara a cara con un cero
siniestro.

public class DivisionSegura {


public static void main(String args[]){
int x = 12;
int y = 0;
int z = 0;
if( y !=0 ) z = x / y;
else System.out.println("Atencin! se pretende dividir por 0");
System.out.println("El resultado es : " + z);
}
}

El programa nos qued mas completo. Con la clusula else incluimos otra alternativa de accin. Pero algo anda
suelto. Este programa siempre muestra un resultado, se cumpla o no la condicin. El mensaje por pantalla no
est incluido en la estructura de seleccin. Tendremos que colocarlo dentro del sector de sentencias que se
ejecutarn cuando la condicin sea verdadera. Para agrupar las sentencias se utilizan las llaves ( { } ) Indicarn
el inicio y el fin de un bloque de sentencias.
Probemos como queda con un bloque
public class DivisionSegura {
public static void main(String args[]){
int x = 12;
int y = 2;
int z = 0;
if( y !=0 ) {
z = x / y;
System.out.println("El resultado es : " + z);
} else
{
System.out.println("Atencin! se pretende dividir por 0");
}
}
}

Las buenas prcticas en defensa de un cdigo mantenible han dictaminado que utilicemos las llaves en todo
momento, an en el caso que utilicemos una sola sentencia.
if (condicin) {
sentencia;
} else {
sentencia;
}

Lamentablemente no siempre nos encontraremos con condiciones tan sencillas. Muchas veces tendremos que
recurrir a proposiciones compuestas para formar una condicin. Para ello podemos recurrir a operadores
relacionales o lgicos. Recuerden que siempre debe dar como resultado un valor booleano.
Supongamos que deseamos saber si un ao es bisiesto. Sabemos que debe ser mltiplo de 4. Para esto
tendremos que verificar si el mdulo es igual a cero.
ao % 4 == 0

Pero no debe ser mltiplo de 100.


( ao % 4 == 0 ) && ( ao % 100 != 0 )

A menos que sea mltiplo de 400.

((( ao % 4 == 0 ) && ( ao % 100 != 0 )) || ( ao % 400 == 0 ))

Formamos una proposicin compuesta con conectores lgicos. Ahora vamos a incorporarlo en una estructura se
seleccin.
if ((( ao % 4 == 0 ) && ( ao % 100 != 0 )) || ( ao % 400 == 0 )) {
System.out.println("Es bisiesto");
} else {
System.out.println("No es bisiesto");
}

Los conectores lgicos nos permiten simplificar la estructura. Sin ellos nos veramos en la necesidad de anidar
las sentencias. Veamos que ocurre si en elejemplo anterior descartamos el AND y el OR.
if ( x % 4 == 0 ) {
if ( x % 100 == 0 ) {
if ( x % 400 == 0 ) {
System.out.println("Es bisiesto");
} else {
System.out.println("No es bisiesto");
}
} else {
System.out.println("Es bisiesto");
}
} else {
System.out.println("No es bisiesto");
}

Parece complicado, pero nos demuestra muchas cosas. En primer lugar observamos que se pueden anidar las
sentencias if-else. Cada resultado de una condicin puede caer en una nueva comprobacin para formar una
estructura compleja de seleccin.
Tambin vemos que hay cierta relacin entre conectores lgicos y la estructura.

Conjuncin
if (condicin1 && condicin2){
sentecia1;
} else {
sentencia2;
}

if ( condicin1 ) {
if ( condicin2 ) {
sentencia1;
} else {
sentencia2;
}
} else {
sentencia2;
}

Disyuncin
if ( condicin1 || condicin2 ) {
sentencia1;
} else {
sentencia2;
}

Negacin

if ( condicin1 ){
sentencia1;
} else {
if ( condicin2 ) {
sentencia1;
} else {
sentencia2;
}
}

if ( ! condicin1) {
sentencia1;
} else {
sentencia2;
}

if ( condicin1) {
sentencia2;
} else {
sentencia1;
}