Saltar al contenido principal

Estructuras de control: condicionales

Hasta ahora hemos aprendido a trabajar con:

  • Variables.
  • Tipos de datos.
  • Operadores.

Pero nuestros programas todavía se ejecutan de una forma muy lineal:

instruccion1;
instruccion2;
instruccion3;
instruccion4;

En programación, muchas veces queremos que el programa tome decisiones.

Por ejemplo:

Si el usuario es mayor de edad, mostrar un mensaje.

O:

Si la contraseña es correcta, permitir el acceso.

O:

Si la nota es mayor o igual que 5, mostrar "Aprobado"; en caso contrario, mostrar "Suspenso".

Para hacer esto utilizamos las estructuras de control condicionales.

Las estructuras condicionales permiten ejecutar unas instrucciones u otras dependiendo de si una condición se cumple.


1. ¿Qué es una condición?

Una condición es una expresión que puede ser:

true

o:

false

Por ejemplo:

edad >= 18

Esta expresión pregunta:

¿La edad es mayor o igual que 18?

Si:

int edad = 25;

la condición:

edad >= 18

será:

true

Pero si:

int edad = 15;

será:

false

Las condiciones suelen construirse utilizando operadores de comparación:

==    igual
!= diferente
> mayor
< menor
>= mayor o igual
<= menor o igual

También podemos utilizar operadores lógicos:

&&    AND
|| OR
! NOT

2. Condicional - if

La estructura if permite ejecutar un bloque de código solamente cuando una condición se cumple.

Su estructura es:

if (condicion) {

// Código que se ejecutará
}

Por ejemplo:

int edad = 20;

if (edad >= 18) {

System.out.println("Eres mayor de edad");

}

Como 20 >= 18 es verdadero, se ejecutará:

Eres mayor de edad

3. ¿Qué ocurre si la condición es falsa?

Si la condición de un if es falsa, es decir, no se cumple, Java simplemente no ejecuta el código que hay dentro.

Por ejemplo:

int edad = 15;

if (edad >= 18) {

System.out.println("Eres mayor de edad");

}

La condición:

edad >= 18

es falsa.

Por lo tanto, no se mostrará nada.

El programa continuará ejecutando las instrucciones que haya después del if.

Por ejemplo:

int edad = 15;

if (edad >= 18) {

System.out.println("Eres mayor de edad");

}

System.out.println("Fin del programa");

Resultado:

Fin del programa

4. if con una variable boolean

También podemos utilizar directamente una variable de tipo boolean.

Por ejemplo:

boolean esMayorDeEdad = true;

if (esMayorDeEdad) {

System.out.println("Puede entrar");

}

Como esMayorDeEdad contiene true, se ejecutará el código.

También podemos tener:

boolean esMayorDeEdad = false;

if (esMayorDeEdad) {

System.out.println("Puede entrar");

}

En este caso no se ejecutará el código.

No es necesario escribir:

if (esMayorDeEdad == true)

Aunque sería válido, es más sencillo y habitual escribir:

if (esMayorDeEdad)

5. if con varias condiciones

Podemos combinar varias condiciones utilizando operadores lógicos.

Por ejemplo, imaginemos que queremos comprobar si una persona tiene entre 18 y 30 años.

Necesitamos comprobar dos condiciones:

edad >= 18

y:

edad <= 30

Como ambas tienen que cumplirse, utilizamos &&:

int edad = 25;

if (edad >= 18 && edad <= 30) {

System.out.println("La edad está entre 18 y 30");

}

Como las dos condiciones son verdaderas, se ejecutará el mensaje.


6. El operador || dentro de un if

El operador || significa OR, es decir, "o".

La condición será verdadera cuando al menos una de las condiciones sea verdadera.

Por ejemplo:

int edad = 70;

if (edad < 18 || edad > 65) {

System.out.println("Tiene una edad especial");

}

Tenemos dos posibilidades:

edad < 18

o:

edad > 65

Como 70 > 65 es verdadero, se ejecutará el código.


7. El operador ! dentro de un if

El operador ! sirve para negar una condición.

Por ejemplo:

boolean tieneEntrada = false;

if (!tieneEntrada) {

System.out.println("No tienes entrada");

}

Tenemos:

tieneEntrada = false

Por tanto:

!tieneEntrada

significa:

!false → true

y se ejecutará el código.


8. if else

Con if podemos decidir si ejecutar un bloque de código.

Pero muchas veces queremos hacer una cosa cuando la condición es verdadera y otra diferente cuando es falsa.

Para esto utilizamos:

if

else

La estructura es:

if (condicion) {

// Si la condición es verdadera

} else {

// Si la condición es falsa

}

Por ejemplo:

int edad = 20;

if (edad >= 18) {

System.out.println("Eres mayor de edad");

} else {

System.out.println("Eres menor de edad");

}

Como edad >= 18 es verdadero, obtenemos:

Eres mayor de edad

Si cambiamos:

int edad = 15;

obtendremos:

Eres menor de edad

9. if else permite elegir entre dos opciones

Podemos pensar en un if else como una pregunta:

¿Se cumple la condición?

Si la respuesta es , ejecutamos el primer bloque.

Si la respuesta es no, ejecutamos el segundo.

Por ejemplo:

int numero = 7;

if (numero % 2 == 0) {

System.out.println("El número es par");

} else {

System.out.println("El número es impar");

}

La condición:

numero % 2 == 0

comprueba si el resto de dividir el número entre 2 es cero.

Como 7 no es divisible entre 2:

El número es impar

10. if else if varias posibilidades

A veces no tenemos solamente dos posibilidades.

Por ejemplo, una nota puede ser:

  • Menor que 5.
  • Entre 5 y 6.
  • Entre 7 y 8.
  • Entre 9 y 10.

Para estas situaciones podemos utilizar:

if
else if
else

La estructura es:

if (condicion1) {

// Código

} else if (condicion2) {

// Código

} else {

// Código

}

Por ejemplo:

int nota = 8;

if (nota < 5) {

System.out.println("Suspenso");

} else if (nota < 7) {

System.out.println("Aprobado");

} else if (nota < 9) {

System.out.println("Notable");

} else {

System.out.println("Sobresaliente");

}

Como la nota es 8, se mostrará:

Notable

11. ¿Cómo funciona else if?

Java comprueba las condiciones de arriba hacia abajo.

Por ejemplo:

int nota = 8;

if (nota < 5) {

System.out.println("Suspenso");

} else if (nota < 7) {

System.out.println("Aprobado");

} else if (nota < 9) {

System.out.println("Notable");

} else {

System.out.println("Sobresaliente");

}

Java comprueba:

¿8 < 5?

No.

Después:

¿8 < 7?

No.

Después:

¿8 < 9?

Sí.

Por tanto, ejecuta:

Notable

Una vez encuentra una condición verdadera dentro de esta cadena, ejecuta su bloque y no continúa comprobando los siguientes else if.


12. Condicional - switch

La estructura switch permite seleccionar qué código ejecutar dependiendo del valor de una variable.

Es especialmente útil cuando tenemos que comparar una variable con varios valores concretos.

La estuctura es:

switch (variable) {

case valor1:
// código 1
break;

case valor2:
// código 2
break;

default:
// código si no es ninguno de los varlores anteriores
}

Por ejemplo, imaginemos que tenemos un número que representa un día de la semana:

int dia = 2;

Si utilizasemos la estructura if else if else:

if (dia == 1){
System.out.println("Lunes");
}else if (dia == 2){
System.out.println("Martes");
}else if (dia == 3){
System.out.println("Miércoles");
}else if (dia == 4){
System.out.println("Juecves");
}else if (dia == 5){
System.out.println("Viernes");
}else if (dia == 6){
System.out.println("Sábado");
}else if (dia == 7){
System.out.println("Domingo");
}

Pero, dado que todas las condiciones son de igualdad (==), también podemos utilizar el switch:

switch (dia) {

case 1:
System.out.println("Lunes");
break;

case 2:
System.out.println("Martes");
break;

case 3:
System.out.println("Miércoles");
break;

case 4:
System.out.println("Jueves");
break;

case 5:
System.out.println("Viernes");
break;

case 6:
System.out.println("Sábado");
break;

case 7:
System.out.println("Domingo");
break;

default:
System.out.println("Día no válido");
}

El resultado será:

Martes

13. Instrucción case

Cada posible valor dentro de un switch se representa mediante case.

Por ejemplo:

case 1:

significa:

Si el valor es 1, ejecuta este código.

Y:

case 2:

significa:

Si el valor es 2, ejecuta este otro código.

Por ejemplo:

int opcion = 2;

switch (opcion) {

case 1:
System.out.println("Has elegido la opción 1");
break;

case 2:
System.out.println("Has elegido la opción 2");
break;

case 3:
System.out.println("Has elegido la opción 3");
break;
}

Resultado:

Has elegido la opción 2

14. ¿Para qué sirve break?

La palabra break sirve para indicar que hemos terminado el case y queremos salir del switch.

Por ejemplo:

switch (opcion) {

case 1:
System.out.println("Opción 1");
break;

case 2:
System.out.println("Opción 2");
break;

}

Cuando Java encuentra el case correspondiente, ejecuta sus instrucciones.

Al encontrar:

break;

sale del switch.


15. ¿Qué ocurre si no ponemos break?

Si no ponemos break, Java puede continuar ejecutando los siguientes case.

Por ejemplo:

int numero = 1;

switch (numero) {

case 1:
System.out.println("Uno");

case 2:
System.out.println("Dos");

case 3:
System.out.println("Tres");

}

Podríamos obtener:

Uno
Dos
Tres

Esto ocurre porque no hemos utilizado break.

Por eso, cuando estamos empezando, es importante recordar siempre:

case 1:
// código
break;

16. default

Dentro de un switch podemos utilizar default.

El default se ejecuta cuando ninguno de los case coincide con el valor.

Por ejemplo:

int opcion = 5;

switch (opcion) {

case 1:
System.out.println("Has elegido la opción 1");
break;

case 2:
System.out.println("Has elegido la opción 2");
break;

case 3:
System.out.println("Has elegido la opción 3");
break;

default:
System.out.println("Opción no válida");
}

Como 5 no coincide con ningún case, se ejecutará:

Opción no válida

17. switch con String

switch no solamente funciona con números.

También podemos utilizar String.

Por ejemplo:

String dia = "lunes";

switch (dia) {

case "lunes":
System.out.println("Hoy es lunes");
break;

case "martes":
System.out.println("Hoy es martes");
break;

case "miércoles":
System.out.println("Hoy es miércoles");
break;

default:
System.out.println("Día no reconocido");
}

Resultado:

Hoy es lunes

18. if o switch

Ambas estructuras permiten tomar decisiones, pero normalmente las utilizaremos en situaciones diferentes.

if

Es especialmente útil cuando necesitamos trabajar con condiciones:

if (edad >= 18)

o:

if (nota >= 5 && nota <= 10)

switch

Es especialmente útil cuando tenemos que comparar una variable con diferentes valores concretos:

switch (opcion)

Por ejemplo:

case 1:
case 2:
case 3:

Podemos pensar:

¿Tengo condiciones?

if

y:

¿Tengo que comparar una variable con diferentes valores concretos?

switch

18. Operador ternario

El operador ternario permite expresar una condición sencilla de una forma más compacta.

Su estructura es:

condicion ? valorSiVerdadero : valorSiFalso

Por ejemplo:

int edad = 20;

String mensaje = edad >= 18
? "Mayor de edad"
: "Menor de edad";

Si edad >= 18 es verdadero:

mensaje = "Mayor de edad"

Si es falso:

mensaje = "Menor de edad"

19. Operador ternario frente a if else

El mismo código utilizando if else sería:

int edad = 20;

String mensaje;

if (edad >= 18) {

mensaje = "Mayor de edad";

} else {

mensaje = "Menor de edad";

}

Con el operador ternario podemos escribir:

int edad = 20;

String mensaje = edad >= 18
? "Mayor de edad"
: "Menor de edad";

Ambos hacen lo mismo.

El operador ternario resulta especialmente útil cuando la decisión es sencilla y queremos obtener un valor.


20. Condicionales dentro de condicionales

También podemos colocar un if dentro de otro if.

Por ejemplo:

int edad = 25;
boolean tieneEntrada = true;

if (edad >= 18) {

System.out.println("Es mayor de edad");

if (tieneEntrada) {

System.out.println("Tiene entrada");
System.out.println("Puede entrar");

}

}

Primero comprobamos:

edad >= 18

Si es verdadero, comprobamos:

tieneEntrada

Esto funciona, aunque cuando las condiciones empiezan a ser muy complejas, muchas veces podemos simplificarlas utilizando operadores lógicos.

Por ejemplo, el código anterior podría escribirse:

if (edad >= 18 && tieneEntrada) {

System.out.println("Puede entrar");

}

Esta segunda versión es más sencilla.


21. Idea clave

Las estructuras condicionales permiten que nuestros programas tomen decisiones.

Hasta ahora nuestro programa podía hacer:

Instrucción 1

Instrucción 2

Instrucción 3

Instrucción 4

Con los condicionales podemos hacer que el programa tome diferentes caminos:

             Condición

¿Se cumple?
/ \
Sí No
↓ ↓
Código A Código B

Las principales herramientas que tenemos son:

if

Para ejecutar código cuando una condición se cumple.

if ... else

Para elegir entre dos posibilidades.

else if

Para trabajar con varias condiciones.

switch

Para elegir entre diferentes valores concretos.

?:

Para realizar decisiones sencillas de forma compacta.

Y podemos combinar condiciones utilizando:

&&    AND
|| OR
! NOT

Dominar estas estructuras es fundamental porque a partir de ahora nuestros programas ya no se limitarán a ejecutar instrucciones una detrás de otra: podrán analizar situaciones y decidir qué hacer en cada caso.