Java Tema 2
Condicionales y bucles
Concepto#
Las estructuras de control permiten modificar el flujo de ejecución de un programa. Con ellas podemos, especialmente:
- Tomar decisiones (seleccionar si se ejecuta un código u otro en función de un valor o condición).
- Repetir bloques de código (bucles).
Según el teorema de la estructura, todo programa puede construirse únicamente con:
- Secuencia: instrucciones ejecutadas en orden.
- Selección: permite bifurcaciones en función de condiciones.
- Iteración: repite un bloque de instrucciones.
Operadores#
Los operadores son símbolos que se utilizan habitualmente para comprobar condiciones.
Operadores de comparación#
Operadores para comparar datos. Dan siempre true o false. En los ejemplos, int a = 5; e int b = 3;:
| Operador | Significa | Ejemplo | Resultado |
|---|---|---|---|
== | Igual que | a == b | false |
!= | Distinto de | a != b | true |
> | Mayor que | a > b | true |
< | Menor que | a < b | false |
>= | Mayor o igual que | a >= 5 | true |
<= | Menor o igual que | a <= 4 | false |
Importante
Para comparar se usan dos iguales, ==. Uno solo, =, no compara: guarda un valor en la variable.
Operadores lógicos#
Operadores utilizados para poder hacer más de una comprobación
&&→ AND (true si ambas condiciones son verdaderas)||→ OR (true si al menos una condición es verdadera)!→ NOT (niega la condición)
Todas las combinaciones posibles (la llamada tabla de verdad):
A | B | A && B | A || B | !A |
|---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | false |
false | true | false | true | true |
false | false | false | false | true |
Por ejemplo, edad >= 16 && edad < 18 solo es true si la edad es 16 o 17.
Estructuras condicionales en Java#
Condicional simple – if#
Cuando solo queremos comprobar si se cumple una condición para realizar una acción.
if (edad >= 18) {
// programación si se cumple
}Condicional doble – if-else#
Cuando queremos realizar una acción si se cumple la condición, y otra acción si no se cumple.
if (edad >= 18) {
// programación si se cumple
} else {
// programación si no se cumple
}Condicional múltiple - if - else if - else#
Cuando queremos realizar diferentes acciones en función del resultado de la condición.
if (edad >= 18) {
// programación que se ejecuta si es mayor de 18 años
} else if (edad >= 16 && edad < 18) {
// programación que se ejecuta si tiene entre 16 y 18 años
} else {
// programación que se ejecuta si no ha cumplido ninguna de las anteriores condiciones (en este caso, si es menor de 16 años)
}Condicional múltiple – switch#
Permite ejecutar un código u otro en función del valor que tenga una variable. Similar al if - else if - else, pero aquí no se compara (no hay símbolos <, >, ==, etc.), solo se mira qué hay en la variable y en cada caso se realiza una acción.
String estacion = "Verano";
switch (estacion) {
case "Verano":
System.out.println("hace calor");
break;
case "Invierno":
System.out.println("hace frio");
break;
default:
System.out.println("no se reconoce esa estación"); //Valores distintos a los anteriores
}Operador ternario#
Es una forma compacta de hacer un if-else, que utilizan usuarios más avanzados. No es necesario que aprendas a usarla todavía, pero está bien saber que existe.
variable = (condición) ? valor_si_verdadero : valor_si_falso;Estructuras iterativas (bucles)#
Bucle for#
Se usa cuando se conoce el número exacto de iteraciones (Ejemplo: repetir 10 veces).
for (int i = 0; i < 10; i++) {
// programación que se repetirá 10 veces
}En este bucle podemos ver:
int i = 0: creamos la variable contadori < 10: decimos que se repita mientras la i sea menor que 10i++: decimos que laivaya aumentando de 1 en 1.
Bucle while#
Se trata de un bucle que se repite mientras se cumpla una determinada condición. Deja de repetirse la instrucción cuando la condición deje de cumplirse. Es decir, es un mientras, no un hasta.
while (puntos > 0) {
// programación que se repetirá mientras puntos sea mayor que cero
}Bucle do-while#
Exactamente igual que el bucle while, con la única diferencia de que primero ejecuta la instrucción que tiene en su interior, y después comprueba si la condición se cumplía. Esto asegura que las instrucciones internas se ejecuten al menos una vez.
do {
// programación que se ejecuta una vez y se repite mientras puntos sea mayor que cero
} while (puntos > 0);Sentencias de salto#
Un bucle, e incluso otras estructuras, pueden interrumpirse con las siguientes instrucciones:
| Instrucción | Qué hace |
|---|---|
break | Interrumpe el bucle (o el switch) y sigue con lo que haya después |
continue | Se salta lo que queda de esta vuelta y pasa a la siguiente |
Equivalencias entre bucles#
Todos los bucles (while, do-while, for) son equivalentes en potencia. Esto quiere decir que un mismo problema podrá resolverse con diferentes bucles. Se recomienda elegirlos según el problema:
| Bucle | Cuándo usarlo | Comprueba la condición… | Mínimo de veces que se ejecuta |
|---|---|---|---|
for | Sabes cuántas veces se repite | antes de cada vuelta | 0 |
while | Se repite mientras se cumpla una condición | antes de cada vuelta | 0 |
do-while | Igual que while, pero tiene que hacerse al menos una vez (por ejemplo, un menú) | después de cada vuelta | 1 |
Errores frecuentes#
| Mensaje o síntoma | Qué significa | Cómo se arregla |
|---|---|---|
incompatible types: int cannot be converted to boolean | Has escrito if (x = 5): con un solo = no se compara, se asigna | Usa ==: if (x == 5) |
reached end of file while parsing | Falta cerrar alguna llave } | Cuenta las llaves: cada { necesita su }. Indentar bien el código ayuda a verlo |
El if siempre se ejecuta, se cumpla o no | Hay un ; justo después del paréntesis: if (x > 0); | Quita ese ;. Detrás de la condición va la llave {, no el punto y coma |
| El programa no termina nunca (bucle infinito) | La condición del bucle nunca llega a ser false | Comprueba que dentro del bucle cambia la variable de la condición (por ejemplo, el i++ del for) |
Un switch ejecuta también los casos siguientes | Falta el break al final de un case | Pon break; al final de cada case |
Comparar textos con == no funciona | En Java los String se comparan con .equals() | if (respuesta.equals("si")). Lo verás en el tema de textos |