Codemaker Java

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;:

OperadorSignificaEjemploResultado
==Igual quea == bfalse
!=Distinto dea != btrue
>Mayor quea > btrue
<Menor quea < bfalse
>=Mayor o igual quea >= 5true
<=Menor o igual quea <= 4false

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):

ABA && BA || B!A
truetruetruetruefalse
truefalsefalsetruefalse
falsetruefalsetruetrue
falsefalsefalsefalsetrue

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.

Java
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.

Java
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.

Java
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.

Java
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.

Java
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).

Java
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 contador
  • i < 10: decimos que se repita mientras la i sea menor que 10
  • i++: decimos que la i vaya 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.

Java
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.

Java
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ónQué hace
breakInterrumpe el bucle (o el switch) y sigue con lo que haya después
continueSe 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:

BucleCuándo usarloComprueba la condición…Mínimo de veces que se ejecuta
forSabes cuántas veces se repiteantes de cada vuelta0
whileSe repite mientras se cumpla una condiciónantes de cada vuelta0
do-whileIgual que while, pero tiene que hacerse al menos una vez (por ejemplo, un menú)después de cada vuelta1

Errores frecuentes#

Mensaje o síntomaQué significaCómo se arregla
incompatible types: int cannot be converted to booleanHas escrito if (x = 5): con un solo = no se compara, se asignaUsa ==: if (x == 5)
reached end of file while parsingFalta 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 noHay 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 falseComprueba que dentro del bucle cambia la variable de la condición (por ejemplo, el i++ del for)
Un switch ejecuta también los casos siguientesFalta el break al final de un casePon break; al final de cada case
Comparar textos con == no funcionaEn Java los String se comparan con .equals()if (respuesta.equals("si")). Lo verás en el tema de textos