Sentencia condicional - if else

La instrucción o sentencia if, controla el flujo de ejecución del programa. Dependiendo de una condición, ejecuta una secuencia de instrucciones o no las ejecuta.

Formato de la sentencia if

if (<condición>) 
	<instrucción>

La <condición> es una expresión booleana. Luego el resultado podrá ser verdadero o falso. Sólo si es verdadero se ejecuta la instrucción. La <instrucción> normalmente es reemplazada por un bloque de instrucciones, que no es más que una secuencia de sentencias separadas por punto y coma.  

if (<condición>) {
	<secuencia de instrucciones separadas por punto y coma>
}

La indentación de las instrucciones dentro del if, no es obligatoria. Es recomendada para un mejor entendimiento del código, ya que hace más visible que sentencias son afectadas por la condición.

Ejemplo:

package com.edu4java.javatutorials;

import javax.swing.JOptionPane;

public class IfSentence {
	public static void main(String[] args) {
		String input = JOptionPane.showInputDialog("Ingrese su edad");
		int edad = Integer.parseInt(input);
		if (edad >= 18) {
			JOptionPane.showMessageDialog(null, "Usted es mayor de edad");
		}
	}
}

Este programa pregunta la edad y si es mayor o igual a 18 muestra el mensaje "Usted es mayor de edad".

La instrucción int edad = Integer.parseInt(input); es necesaria ya que showInputDialog devuelve un tipo String y necesitamos convertirlo a un número para poder compararlo con 18.

Si es menor a 18, no mostramos ningún mensaje. Esto se puede mejorar usando un bloque else.

Formato de la sentencia if con cláusula else

A la instrucción if se le puede agregar una cláusula else, que permite ejecutar una instrucción o un bloque de instrucciones en el caso de que la condición no se cumpla.

if (<condición>) 
	<instrucción>
else
	<instrucción>

Usando un bloque de instrucciones seria:

if (<condición>) {
	<secuencia de instrucciones separadas por punto y coma>

} else { <secuencia de instrucciones separadas por punto y coma> }

Si la condición es verdadera (true), se ejecuta el primer bloque de instrucciones, si la condición es falsa (false), se ejecuta el segundo bloque de instrucciones.

Ejemplo:

package com.edu4java.javatutorials;

import javax.swing.JOptionPane;

public class IfSentence {
	public static void main(String[] args) {
		String input = JOptionPane.showInputDialog("Ingrese su edad");
		int edad = Integer.parseInt(input);
		if (edad >= 18) {
			JOptionPane.showMessageDialog(null, "Usted es mayor de edad");
		}else {
			JOptionPane.showMessageDialog(null, "Usted es menor de edad");
		}
	}
}

Anidamiento de sentencias

Dentro del bloque de instrucciones podemos incluir cualquier instrucción. Es muy común en programacion encontrar sentencias if dentro de sentencias if. Ejemplificamos esto resolviendo un un problema clásico.

Problema: Dado tres lados de un triángulo, decir si es equilátero, isósceles o escaleno:  

 

package com.edu4java.javatutorials;

import javax.swing.JOptionPane;

public class Triangle {

	public static void main(String[] args) {
		int lado1 = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el primer lado"));
		int lado2 = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el segundo lado"));
		int lado3 = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el tercer lado"));

		if (lado1 == lado2 && lado2 == lado3) {
			JOptionPane.showMessageDialog(null, "El triángulo es equilátero");
		} else {
			if (lado1 == lado2 ||  lado2 == lado3 || lado1 == lado3) {
				JOptionPane.showMessageDialog(null, "El triángulo es isósceles");
			} else {
				JOptionPane.showMessageDialog(null, "El triángulo es escaleno");
			}
		}
	}
	
}

La línea “int lado1 = Integer.parseInt(JOptionPane.showInputDialog("Ingrese el primer lado"));” usa como argumento para la función parseInt a la función showInputDialog. Así reemplazamos las dos líneas que usamos para ingresar un número del ejemplo anterior, por una sola línea.

Explicación de las condiciones:

Función condicional

Existe una versión condicional que es una función en vez de una instrucción. Recibe tres parámetros, una condición y dos expresiones. Si la condición es verdadera se evalúa y retorna la primera expresión, sino la segunda.

(condición) ? <expresión para verdadero> : <expresión para falso>

Las expresiones pueden ser de cualquier tipo, pero el mismo tipo las dos.

Ejemplos:

		int i = (5>4) ? 10 : 0; // i valdrá 10
		char c = (false) ? 'a' : 'b'; // c valdrá 'b' 

Podemos reescribir el primer ejemplo de la mayoría de edad usando esta función.

package com.edu4java.javatutorials;

import javax.swing.JOptionPane;

public class IfSentenceConditional {
	public static void main(String[] args) {
		int edad = Integer.parseInt(JOptionPane.showInputDialog("Ingrese su edad"));

		String respuesta = 
			(edad >= 18) ? "Usted es mayor de edad" : "Usted es menor de edad";
		
		JOptionPane.showMessageDialog(null, respuesta);
	}
}