El condicional if – else if – else de Java

El condicional if – else if – else de Java

Empecemos ya con los condicionales. En concreto, if else if else.

Con lo que hemos dado ya en los 8 primeros capítulos del curso, ya tienes el conocimiento necesario para empezar con las estructuras de control de flujo.

Flujo de ejecución normal en programas Java

Hablé brevemente sobre el flujo de ejecución normal, de un programa java, en el capítulo 2. Por si no lo recuerdas, el flujo de ejecución, es el orden en que se ejecutan cada una de las líneas de código de un programa.

En Java, empieza en la columna 1, línea 1. Va leyendo toda la línea y al final, pasa a la siguiente.

Sin embargo, gracias a las estructuras de control de flujo, como son los condicionales, podemos alterar esta normalidad y hacer que el programa vaya tomando formas y caminos distintos.

Declaraciones de selección

En ocasiones, verás a las estructuras condicionales, denominarlas como estructuras o declaraciones de selección.

En Java, tenemos dos tipos de declaraciones de selección if (la que veremos en este capítulo) y switch.

Verás que aunque su mecanismo de decisión gira en torno a un valor booleano (decisiones mediante verdadero o falso), se pueden hacer infinidad de cosas y que los necesitarás constantemente.

El condicional IF de Java

Empecemos con algo muy sencillo, un programa que va a tener un condicional if, para que veas de una vez por todas, como hacer que tu programa tome decisiones booleanas para unas veces ejecutar cierto código y otras otro código diferente.

El condicional if, lleva una expresión o condición como las que vimos en el capítulo 7 con los operadores de comparación. Si esta expresión devuelve true (es verdadera) se ejecutará el bloque de código que le pongamos al if. En cambio, si devuelve false, no se ejecutará nada de ese bloque. Será ignorado y continuará con normalidad en la siguiente línea de código del programa.

Sintaxis del condicional if de Java

La sintaxis del condicional if en Java, no tiene gran complicación. Declaramos esta estructura mediante la palabra reservada "if", ponemos entre unos paréntesis la condición que queramos evaluar y entre llaves de apertura y cierre, escribiremos todo el código que se ejecutará solo si se cumple la condición (si es true).

if (condición) {
	//bloque con el código que quieras (se ejecuta solo si la condición es true)
}

En el siguiente ejemplo, he creado tres variables, con las que verás el resto de ejemplos de este capítulo.

En el condicional if, se evalúa si el valor de numero1 es menor que el de numero2. Esto es cierto. Esta expresión booleana devuelve true. Por lo tanto, se ejecuta el bloque de código envuelto entre las llaves del if.

El código solo es una línea con un print(), pero podría ser mucho más código.

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 < numero2) {
            System.out.print("Esto es verdadero.");
        }
    }
}

Resultado en la consola

Esto es verdadero.

En el caso de que la expresión del if no se cumpla, no se va a ejecutar el bloque de código, por lo que, en este caso, no devolvería nada en la consola.

Fíjate en la expresión. Esta vez he puesto que numero1 es mayor que numero2. Esto es false.

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 > numero2) {
            System.out.print("Esto es verdadero.");
        }
    }
}

Pese a que el bloque de código del if no se ejecute cuando devuelve false, el resto de líneas inferiores, siguen ejecutándose con normalidad en el flujo de ejecución del programa:

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 > numero2) {
            System.out.print("Esto es verdadero.");
        }

        System.out.print("Este texto está fuera del if y se ejecuta siempre.");
    }
}

Resultado en la consola

Este texto está fuera del if y se ejecuta siempre.

En caso de que fuera true, se ejecutará el código del bloque if y el resto de líneas igualmente. Funciona independientemente del resto de código del programa.

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 > numero2) {
            System.out.println("Esto es verdadero.");
        }

        System.out.print("Este texto está fuera del if y se ejecuta siempre.");
    }
}

Resultado en la consola

Esto es verdadero.
Este texto está fuera del if y se ejecuta siempre.

Diferencia entre el método print() y println()

Aprovecho para comentarte algo que no había dicho en el curso todavía. Ya que es algo que aparece en el código del if. La diferencia entre print() y println().

Básicamente, ambos métodos hacen lo mismo. Sacar algo en la consola. La diferencia fundamental reside en la forma en que lo hacen.

println() hace una nueva línea cada vez que se utiliza. Hace lo que se conoce en informática como salto de línea (equivalente a pulsar la tecla ENTER en un editor de texto).

En cambio, print() no hace este salto.

Ejemplo con el método print():

Aunque en el código tenemos tres líneas de texto individuales, estas salen todas juntas sin saltos de línea al final.

System.out.print("Línea de texto 1.");
System.out.print("Línea de texto 2.");
System.out.print("Línea de texto 3.");

Resultado en la consola

Línea de texto 1.Línea de texto 2.Línea de texto 3.

Ejemplo con el método println():

System.out.println("Línea de texto 1.");
System.out.println("Línea de texto 2.");
System.out.println("Línea de texto 3.");

Resultado en la consola

Línea de texto 1.
Línea de texto 2.
Línea de texto 3.

Si te cuesta acordarte de cuál es cuál, haz una traducción al español. Print en español, es imprimir. Eso es lo que hace, imprimir (que en programación se refiere a mostrar algo en pantalla).

Por otro lado, println viene de print line (imprimir línea en español).

Espero que de alguna forma, te sea fácil recordar estos dos nombres.

El uso de else en Java

Especificar un bloque de código para condiciones true está muy bien, pero… ¿Y si queremos que haya un código alternativo para que se ejecute cuando la expresión del if es false? Estamos de suerte, ya que gracias al uso de la palabra else, podemos hacer esto mismo.

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 < numero2) {
            System.out.println("La expresión se cumple (true)");
        } else {
            System.out.println("La expresión no se cumple (false)");
        }
    }
}

Resultado en la consola

La expresión se cumple (true)

Puesto que numero1 es menor que numero2, se ejecuta el código del bloque if. El del else, es ignorado. Después de eso, continua el flujo de ejecución normal del programa.

En cambio, mira la siguiente expresión del if, es falsa:

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 == numero2) {
            System.out.println("La expresión se cumple (true)");
        } else {
            System.out.println("La expresión no se cumple (false)");
        }
    }
}

En este caso, puesto que es falsa, ya no se ejecuta el código del bloque if como ocurría antes, pero ahora, tenemos una alternativa para el programa, que es el código del bloque else.

Resultado en la consola

La expresión no se cumple (false)

Por si alguien no lo entiende, dejo aquí un resumen:

  • Expresión true: se ejecuta el código del if. else descartado.
  • Expresión false: se ejecuta el código del else. if descartado.

Por cierto, fíjate en la línea 11 del código, donde está declarado el bloque else. Este no lleva condición, está sujeto siempre a que la que lleva el if devuelva false.

Por la forma de escribirlo, muchas veces, en Java, se escribe al lado de la llave de cierre del bloque if, para que sea más fácil de ver a simple vista, que el bloque else está ligado al anterior bloque, el del if.

Si escribes esta declaración en otra línea (sin poner otro código por en medio), no pasa nada en cuanto a errores, por convención sí.

¿Es recomendable seguir las convenciones en programación?

Si te preguntas si las convenciones son buenas, la respuesta es que sí. En este universo que es la programación, es muy probable que alguien tenga que editar tu código. Seguir unas convenciones (reglas) universales en un lenguaje de programación, es la clave para un código limpio y fácil de entender por cualquiera.

Ahora bien, puede que en más de una ocasión, te despistes y utilices convenciones de otros lenguajes donde no toca, no le des una importancia crucial a esto. Preocúpate primero con aprender a escribir código, ya habrá tiempo de pulir la escritura.

Sobre todo, cuando llevas un tiempo sin tocar mucho un lenguaje de programación, suele pasar que utilizas "costumbres" de otros.

También, si veis que me descuido de algo y sabéis que no está correcto, os invito a que me lo digáis, será de gran ayuda, tanto para mí como para quién esté estudiando conmigo.

Tampoco me hagáis quedar mal T.T, jajaja.

Bloque else sin bloque if

El bloque else, nunca puede ir solo, puesto que no lleva expresión, ¿qué evaluaríamos en él?

Este siempre está sujeto a un if que es el que lleva la voz cantante (expresión o condición).

Si intentas hacer esto, Java te devolverá un error:

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        else {
            System.out.println("La expresión no se cumple (false)");
        }
    }
}

Error en la consola

java: 'else' without 'if'

Este error reza, bloque 'else' sin bloque 'if' (lo de bloque lo añado yo para hacer la traducción más "humana").

Diagrama de flujo if else de Java

Y además, por completar, te dejo un diagrama de flujo que te será de utilidad en el futuro para diseñar tus algoritmos antes de plasmarlos en código.

Los diagramas de flujo son útiles para visualizar las posibles salidas que tendrá un programa. Normalmente, cuando vamos a diseñar un programa medianamente complejo, tendremos que hacer un diagrama de flujo antes de empezar a escribir el código. Esto facilitará enormemente el trabajo a la hora de escribir el código, ya que tendremos una hoja de ruta detallada de todas nuestras ideas, plasmadas en este esquema.

Este diagrama representa un condicional if else cualquiera, no necesariamente el de los ejemplos.

Primero empieza con una condición, que es la que escribimos al declarar el condicional if. Esta condición solo puede tomar dos caminos, o es verdadera (true) o es falsa (false).

Como ves en el diagrama, solo se puede ejecutar a la vez uno de los dos bloques. Después de esto, continúa con el resto de líneas de código que encuentre, con total normalidad.

En los bloques azules, el que tiene el camino (true), es el que corresponde al bloque if. El que tiene false, es el que corresponde al bloque else.

Cada uno puede tener un número "n" de instrucciones, es decir, un número indeterminado de ellas.

diagrama if else java

Si creías que esto era todo, agárrate, que aún queda la mejor parte.

if, else if, else de Java

En los condicionales if, se pueden emplear más matices de la verdad (varias condiciones), no todo tiene porque ser blanco o negro (true o false).

Podemos especificar más condiciones true aparte de la del bloque if, con el fin de tener más de un posible camino antes de llegar al bloque else.

Es posible gracias a los bloques else if.

Sintaxis del condicional if con todos sus bloques

Esta sería la sintaxis para añadir el bloque nuevo (else if). Si te fijas, tiene su propia condición.

La condición del bloque else if, solo se evalúa si la del bloque if devuelve false.

Si el bloque else if devuelve false también, pasamos como última alternativa al bloque else. Cada uno de estos bloques se va a ejecutar dejando anulados al resto.

if (condición) {
	//bloque de código
} else if (condición) {
  	//bloque de código
} else {
 	 //bloque de código
}
public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 > numero2) {
            System.out.println("Se ejecuta el if.");
        } else if (numero2 == numero3){
            System.out.println("Se ejecuta el else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}

Resultado en la consola

Se ejecuta el else.

¿Por qué se ejecuta el bloque else?

Analicemos como está funcionando esto.

Bloque if devuelve true

Si la expresión del if es true, se ignoran los bloques posteriores.

Bloque if devuelve false

Si la condición del if da false, se ignora y pasa a evaluar el else if.

Bloque if else true

Si la condición del bloque if else es true, se ejecuta su bloque de código. Se ignora el resto (en el ejemplo, el bloque else).

Bloque if else false

En el caso de que este bloque devuelva false, se ignora y pasamos a otro bloque else if (si lo hubiera). Puesto que no hay nada más, pasamos a ejecutar el bloque else, este, como ya sabes, no se evalúa, es por si todo da false.

Algunos ejemplos más

Este nuevo tipo de bloque es mucho más fácil de entender de lo que parece. Veamos unos ejemplos.

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 > numero2) {
            System.out.println("Se ejecuta el if.");
        } else if (numero2 > numero3){
            System.out.println("Se ejecuta el else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}

Resultado en la consola

Se ejecuta el else if.

Esta vez, el bloque if da false, y pasamos al bloque else if, el cual, en esta ocasión, devuelve true. El código del else, se ignora.

En el siguiente ejemplo, la condición del if, es verdadera, ya que numero1 tiene el mismo valor que numero3. Sin embargo, el bloque else if, tiene una condición también verdadera. Entonces, ¿cuál se ejecutará?

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 == numero3) {
            System.out.println("Se ejecuta el if.");
        } else if (numero2 > numero3){
            System.out.println("Se ejecuta el else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}

La respuesta es el primer bloque que devuelva true. En este caso, el primero que encuentra Java es el del if. El resto es ignorado, aunque devuelvan un valor true.

Diagrama de flujo if, else if, else de Java

Nos queda ver un diagrama más, para que veas como funciona if, else if, else de una forma más visual.

Primero, llegamos a la condición del if. Si esta da true, se ejecuta su código y de ahí, pasamos al resto del programa.

Si la condición del if es false, se evalúa el bloque else if. Si su condición es true, se ejecuta su bloque de código y de ahí pasamos al resto del programa.

Si la condición del else if también es false, llegamos al bloque else, el cual, no tiene expresión. Se ejecutará su código y pasaremos al resto del programa.

diagrama if - else if - else java

Múltiples bloques else if

Una de las ventajas de los bloques else if, es que puedes colocar los que quieras, no tiene porque ser uno solo.

Estos bloques funcionan igual, se irán evaluando en caso de que el anterior devuelva false.

En este caso, el bloque if da false. Pasamos al primer else if. Este da false. Pasamos al siguiente. Así hasta que alguno de true, como es el caso del tercer else if.

Si nada se cumple, pasamos como siempre en última instancia a ejecutar el bloque else.

public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        if (numero1 > numero3) {
            System.out.println("Se ejecuta el if.");
        } else if (numero2 < numero3){
            System.out.println("Se ejecuta el primer else if.");
        } else if (numero1 > 50){
        System.out.println("Se ejecuta el segundo else if.");
        } else if (numero2 == 15){
        System.out.println("Se ejecuta el tercer else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}

Resultado en la consola

Se ejecuta el tercer else if.

Ten en cuenta las siguientes cosas antes de continuar:

  • El bloque else, depende de que haya siempre, al menos, un bloque if, es "expresión" dependiente (chiste barato de mi cosecha).
  • Puedes colocar 0 o más bloques else if en un conjunto if.
  • Los bloques else if se escriben siempre después de un bloque if y antes del bloque else, es decir, entre ellos.
  • El bloque else if, depende del bloque if, aunque tenga expresión propia, no se admite esto en Java. Esto devolverá el siguiente error:
public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        } else if (numero2 < numero3){
            System.out.println("Se ejecuta el primer else if.");
        } else if (numero1 > 50){
        System.out.println("Se ejecuta el segundo else if.");
        } else if (numero2 == 15){
        System.out.println("Se ejecuta el tercer else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}

Error en la consola

java: illegal start of type

El mensaje de error indica "inicio ilegal de tipo". Cuando veas este error, ya sabes una de las posibles causas.

Dejamos este kilométrico capítulo con unos ejercicios para que practiques un poco lo aprendido.

Todo el temario del curso Java aquí.

Ejercicios de Java

Te dejo unos ejercicios relacionados con el temario. Las soluciones, las encontrarás en el siguiente capítulo.

  1. Encuentra los errores en este condicional if y corrígelos.
public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
        int numero3 = 10;

        //condicional if
        } else if (numero2 < numero3){
            System.out.println("Se ejecuta el primer else if.");
        } else if (numero1 > 50){
        System.out.println("Se ejecuta el segundo else if.");
        } else if (numero2 == 15){
        System.out.println("Se ejecuta el tercer else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}
  1. Crea un condicional if que evalúe si numero1 es diferente a numero2.
public class Main {
    public static void main(String[] args) {
        //variables del programa
        int numero1 = 10;
        int numero2 = 15;
    }
}
  1. Sin ejecutar este código. ¿Sabrías decir qué bloque del condicional se va a ejecutar?
public class Main {
    public static void main(String[] args) {
        //condicional if
        if (10 > 5) {
            System.out.println("Se ejecuta el if.");
        } else if (5 < 10) {
            System.out.println("Se ejecuta el primer else if.");
        } else if (10 == 10){
            System.out.println("Se ejecuta el segundo else if.");
        } else if (5 != 5){
            System.out.println("Se ejecuta el tercer else if.");
        } else {
            System.out.println("Se ejecuta el else.");
        }
    }
}

Soluciones de los ejercicios del capítulo anterior

  1. En este ejercicio, tenías que ordenar el código con las indentaciones correctas.
public class Main {
    public static void main(String[] args) {
        int numero1 = 7;
        int resultado = 10 + numero1;
        if (resultado > 15){
            System.out.println("El resultado de la suma es: " + resultado);
        }
        for (int x = 0; x <= 10; x++) {
            System.out.println("El valor es " + x);
        }
    }
}
  1. Aquí solo tenías que añadir algunos puntos y coma y llaves faltantes en el código.
public class Main {
        public static void main(String[] args) {
            byte numero1 = 10;
            byte numero2 = 20;
            boolean comparacion = numero1 != numero2;
            System.out.print(comparacion);
        }
}

3 comentarios en «0»

  1. bro muy buenos tus cursos, uchas gracias por el trabajo que te das sigue adelante son de mucha ayuda. y eres muy bueno en esto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior Ejercicios de Python con *args y **kwargs
curso Java Entrada siguiente El condicional switch de Java