Aprende Java Fácil. Tema 4. Pasando el rato en comisaría / Trabajando con condicionales

Capítulo 4. Pasando el rato en comisaría / Trabajando con condicionales

No sé cómo ha pasado, pero estoy en comisaría. En concreto, encerrado en una habitación junto con Rich y su amigo, que, por cierto, se llama Fernando. La historia es bastante sencilla de contar, aunque para mí no tiene ningún sentido. No sé qué está ocurriendo exactamente, ni por qué me han detenido.

Poco después de que Fernando llegase a casa, la policía irrumpió sin previo aviso. Todo ocurrió muy rápido. Varios hombres armados entraron gritando y ordenándonos que nos tumbásemos en el suelo. Nos reunieron a los tres en el salón y nos sentaron en el suelo. Mientras tanto, se pusieron a registrar toda la casa. No sé qué estarían buscando, pero estaba claro que no querían dejarse nada. El registro parecía muy minucioso.

A los pocos minutos de empezar el registro, vi salir a un policía con nuestros ordenadores. No pude evitar pensar que ellos sí que habían podido abrir el armario de Chani, mientras que nosotros llevábamos dos días sin poder acceder a nuestras cosas. No me parecía justo. También me preguntaba quién iba a recoger todo ese desaguisado. Acabábamos de limpiar toda la casa y ahora todo estaba incluso peor que después de la fiesta. Pero lo que más veces se me pasaba por la cabeza era la mala suerte que había tenido Fernando. Nunca había venido antes y, a los 20 minutos de llegar, aparece la policía. En ningún momento he pensado que su visita tenga alguna relación con esta detención. Simplemente ha sido muy mala suerte.

Salvo el susto inicial, en ningún momento me he sentido preocupado. No tengo miedo, ya que no he hecho nada malo. Pueden revisar mi ordenador y mi móvil si quieren. No van a encontrar nada que se pueda considerar delito.

Fernando está completamente blanco y no ha dicho ni una palabra desde que nos trajeron a esta habitación. Rich, en cambio, está muy tranquilo. Siempre está tranquilo. Dice que habrá sido un error. En nuestro edificio hay muchos pisos alquilados y mucha gente que está de paso. Lo más seguro es que hayan entrado en el piso equivocado. Yo opino lo mismo.

Lo peor es no saber qué está pasando ni cuánto tiempo vamos a tener que esperar. Requisaron nuestros teléfonos, así que no tenemos mucho que hacer. La sugerencia de Rich es que dediquemos un poco de tiempo para mejorar mis conocimientos de Java. No me apetece mucho, pero eso nos mantendrá la cabeza ocupada.

Parece que el siguiente tema son las condicionales. Según Rich, esto va a ayudarnos a mejorar mucho nuestros programas. Dice que es un tema divertido y fácil de aprender, así que ha aumentado mucho mi nivel de moral. Pongámonos a ello cuanto antes.

Trabajando con condicionales

Importancia de las condicionales en Java

Las condicionales permiten que los programas tomen decisiones basadas en diferentes situaciones. Sin ellas, los programas seguirían una serie de pasos de manera estricta, sin poder adaptarse a cambios o a distintos tipos de datos. Las condicionales hacen que el código sea más flexible, lo cual es esencial para crear aplicaciones interactivas y funcionales.

Gracias a las condicionales, los programadores pueden hacer que sus programas respondan a lo que haga el usuario, a cambios en el entorno o a datos en tiempo real. Esto es muy importante para desarrollar aplicaciones útiles en el mundo real, ya que permiten que los programas manejen diferentes situaciones según las variables que introduzca el usuario.

Por ejemplo, en una aplicación bancaria, las condicionales son necesarias para verificar transacciones y validar la información que ingresa el usuario. También ayudan a mantener la seguridad del sistema. En los videojuegos, las condicionales controlan cómo el juego reacciona a las acciones del jugador, haciendo que la experiencia sea más dinámica e interactiva.

Estructura Básica de un if

Un “if” es una forma de decirle a nuestro programa que haga algo solo si una condición específica se cumple. Piensa en esto como tomar decisiones en la vida cotidiana. Por ejemplo, «Si está lloviendo, lleva un paraguas». En programación, se escribe de una manera similar:

if (condición) {

          // Código que se ejecuta si la condición es verdadera

}
  1. if: Esta palabra clave indica el inicio de una condición.
  2. Condición: Dentro de los paréntesis, escribimos la condición que queremos comprobar. Por ejemplo, «si un número es mayor que 10».
  3. Código entre llaves { }: Dentro de las llaves, escribimos el código que queremos que se ejecute si la condición es verdadera.

Vamos a verlo con un ejemplo muy sencillo. Imagina que estás creando un programa y quieres que te diga «Es un número grande» si un número es mayor que 10. Así es cómo deberías escribir el código:

int numero = 15; 

// Hemos definido un número 

if (numero > 10) {

            System.out.println("Es un número grande");

}
  • Como puedes ver lo primero que hemos hecho ha sido definir un número y darle el valor 15.
  • Después queremos que entienda que queremos que realice una acción, pero solo si el número es mayor que 10. if (numero > 10): Aquí estamos diciendo «si el número es mayor que 10».
  • Por último, creamos una línea usando System.out.println que imprimirá en la pantalla si la condición es verdadera.

Por lo tanto, si número es mayor que 10 (en este caso, 15 es mayor que 10), la computadora imprimirá «Es un número grande»; si es menor, simplemente no hará absolutamente nada.

Declaraciones else y else if

Cuando usamos if, podemos decirle a nuestro programa que haga algo si una condición es verdadera. Pero, ¿qué pasa si esa condición no se cumple? Ahí es donde entran las declaraciones else y else if.

–          “Else”

La declaración else se usa para especificar un bloque de código que se ejecutará si la condición del if no es verdadera. Es como decir: «Si la condición no se cumple, haz esto otro».

int numero = 15; 

if (numero > 10) {

           System.out.println("Es un número grande");

} else {

           System.out.println("Es un número pequeño");

}

Arriba vemos el ejemplo anterior pero un poco modificado. Si el número es mayor que 10, mostrará «Es un número grande». Exactamente lo mismo que en el anterior programa, pero antes si un número era menor que 10 no hacía nada, ahora mostrará el siguiente texto: «Es un número pequeño».

–          “Else if”

La declaración else if se usa para comprobar otra condición si la primera condición del if no se cumple. Es como decir: «Si la primera condición no se cumple, prueba esta otra condición».

int numero = 15; 

if (numero > 10) {

            System.out.println("Es un número grande");

} else if (numero > 5) {

             System.out.println("Es un número mediano");

} else {

            System.out.println("Es un número pequeño");

}

Repetimos mismo ejemplo otra vez. Sólo que ahora no hay dos condicionales sino tres. El ejemplo habla por sí solo. La primera vez usamos un else if ya que aún queremos proponer una condición más. La segunda vez, un else simple, ya que es la última condición que necesitamos plantear.

Anidación de Condicionales

Explicar lo que es la anidación de condicionales es sencillo; comprenderlo quizás es algo más difícil, pero allá vamos. La anidación de condicionales significa introducir una declaración if (o else if o else) dentro de otra declaración if. Esto permite crear decisiones más complejas, verificando múltiples condiciones.

Para no hacernos un lío monumental, lo mejor será explicarlo directamente con un ejemplo. Presta atención, ya que el código se empieza a volver un poco más complejo.

Vamos a crear un programa que nos indique:

  • Si el número es mayor que 10.
  • Si el número es mayor que 5 pero menor o igual a 10.
  • Si el número es mayor que 2 pero menor o igual a 5.
  • Si el número es menor o igual a 2.
// Para este ejemplo, suponemos que el número a tener en cuenta es 3.

// Pero funcionaría igual con cualquier cifra.

int numero = 3;

if (numero > 10) {

    System.out.println("El número es mayor que 10");

} else {

    if (numero > 5) {

        System.out.println("El número es mayor que 5 pero menor o igual a 10");

    } else {

        if (numero > 2) {

            System.out.println("El número es mayor que 2 pero menor o igual a 5");

        } else {

            System.out.println("El número es menor o igual a 2");

        }
    }
}

Ese es el código, ahora vamos a analizarlo por partes.

Primera condición if:

  • Comprobamos si numero es mayor que 10.
  • Si es verdadero, se imprime:
    "El número es mayor que 10"
  • Si no es verdadero, se entra en el bloque else.

Segunda condición if (anidada dentro del primer else):

  • Comprobamos si numero es mayor que 5.
  • Si es verdadero, se imprime:
    "El número es mayor que 5 pero menor o igual a 10"
  • Si no es verdadero, se entra en el siguiente bloque else.

Tercera condición if (anidada dentro del segundo else):

  • Comprobamos si numero es mayor que 2.
  • Si es verdadero, se imprime:
    "El número es mayor que 2 pero menor o igual a 5"
  • Si no es verdadero, se imprime:
    "El número es menor o igual a 2"

Haciendo un inciso y dándome cuenta de que en este caso la teoría es mucho más difícil que la práctica, me gustaría darte un consejo. Mantén tu código siempre lo mas sencillo y limpio posible. Aunque comprendo que, en algunas ocasiones, dependiendo de la complejidad del programa puede resultar imposible o al menos muy difícil.

Si tenemos que lidiar con situaciones en las que necesitamos utilizar muchas condicionales anidadas, lo mejor es que utilicemos else if. Mira en este ejemplo como el código queda mucho más claro:

int numero = 3;

if (numero > 10) {

System.out.println("El número es mayor que 10");

} else if (numero > 5) {

System.out.println("El número es mayor que 5 pero menor o igual a 10");

} else if (numero > 2) {

System.out.println("El número es mayor que 2 pero menor o igual a 5");

} else {

System.out.println("El número es menor o igual a 2");

}

Incluso explicarlo es más sencillo:

  • Primera Condición if:

Comprobamos si numero es mayor que 10.

  • Primera Condición else if:

Si numero no es mayor que 10, comprobamos si es mayor que 5.

  • Segunda Condición else if:

Si numero no es mayor que 5, comprobamos si es mayor que 2.

Condición else:

  • Si ninguna de las condiciones anteriores es verdadera, ejecutamos este bloque.

Utilizando else if, podemos hacer que nuestro código sea más legible y fácil de entender. Esto es muy útil para tomar decisiones basadas en varios criterios.

Switch case

El switch-case en Java es una estructura condicional que se utiliza cuando tenemos varias opciones posibles y queremos ejecutar diferentes bloques de código dependiendo del valor de una variable. Es una versión más sencilla de escribir que un montón de if-else encadenados.

En un switch, la variable que estamos evaluando se compara con varios valores llamados case. Si encuentra una coincidencia, ejecuta el código correspondiente a ese case. Si no encuentra coincidencias, podemos usar un default, que es como un «plan B»: el código en default se ejecutará si ninguna de las otras opciones se cumple.

Vamos a verlo con un ejemplo sencillo. Creamos un programa que le dice al usuario qué día de la semana es según un número del 1 al 7 (1-Lunes, 2-Martes, etc.). Usamos switch-case para decidir qué día corresponde a cada número.

public class Main {

    public static void main(String[] args) {

        int dia = 3; // Supongamos que el usuario ingresa el número 3

        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("Número inválido");
                break;
        }

    }

}

Operadores de Comparación

Los operadores no solo van a sernos útiles con las condicionales; a partir de ahora, los vas a utilizar prácticamente en todos los programas y ejercicios que hagas. Por lo tanto, presta atención y no pierdas de vista esta tabla. Te aseguro que pronto la vas a necesitar, y hasta que te la aprendas de memoria, no te quedará más remedio que volver para echar un vistazo.

a == b: Comprueba si a es igual a b.

a != b: Comprueba si a es distinto de b. a > b: Comprueba si a es mayor que b.

a >= b: Comprueba si a es mayor o igual que b. a < b: Comprueba si a es menor que b.

a <= b: Comprueba si a es menor o igual que b.

Operadores lógicos

Lo mismo ocurre con los operadores lógicos: vas a hartarte de verlos y son fundamentales si quieres programar en Java. Ahora bien, considero que son quizás algo más difíciles de entender que los operadores de comparación. Por eso, después de enseñarte la tabla, te mostraré un pequeño ejemplo.

  • && (AND lógico)

a && b: Comprueba si ambas condiciones a y b son verdaderas.

  • || (OR lógico)

a || b: Comprueba si al menos una de las condiciones a o b es verdadera.

  • ! (NOT lógico)

!a: Invierte el valor lógico de a.

public class Main {
     public static void main(String[] args) {


              int a = 6;


               // OR lógico

               // Utilizaremos || para ver si a es impar o mayor que 8.


               if (a>8 || a%2==0) {

                     System.out.println("a es par o mayor que 8" );

                } else System.out.println("a no cumple ninguna de las dos condiciones");


                // AND lógico

                // Utilizaremos && para ver si a es par y además mayor que 8.


                int b = 10;

                if (b>8 && b%2==0) {

                System.out.println("b es par y mayor que 8" );
                } else System.out.println("b no cumple una de las dos condiciones");
                  


                 // NOT lógico

                 // Utilizamos este operador para invertir el valor lógico
                 // En las variables a y b buscamos que fuesen pares. Para esta que sea impar.


                int c = 7;

               if (c%2!=0) {

                     System.out.println("c es impar" );

               } else System.out.println("c es par" ); 

     }
}

Veamos otro ejemplo:

int x = 5; 
int y = 10;

// AND lógico con operadores de comparación 

if (x < 10 && y > 5) {

       System.out.println("x es menor que 10 y y es mayor que 5");

}

// OR lógico con operadores de comparación 

if (x < 10 || y < 5) {

       System.out.println("Al menos una de las condiciones es verdadera");

}

// NOT lógico con operadores de comparación 

if (!(x > 10)) {

       System.out.println("x no es mayor que 10");

}
  • x < 10 && y > 5: Comprueba si x es menor que 10 y y es mayor que 5. Ambas condiciones son verdaderas, así que el mensaje se imprime.
  • x < 10 || y < 5: Comprueba si x es menor que 10 o y es menor que 5. La primera condición es verdadera, así que el mensaje se imprime.
  • !(x > 10): Comprueba si x no es mayor que 10. La condición original x > 10 es falsa, así que, !(x > 10) es verdadera y el mensaje se imprime.

Resumen de lo aprendido

Las condicionales en Java son totalmente necesarias para que los programas tomen decisiones basadas en diferentes escenarios. Sin condicionales, los programas seguirían instrucciones rígidas y no podrían adaptarse a cambios ni a datos diversos. Las condicionales añaden flexibilidad y dinamismo, permitiendo la creación de aplicaciones interactivas y funcionales que responden a las acciones del usuario, a cambios en el entorno o a datos en tiempo real.

La estructura básica de una condicional en Java comienza con la palabra clave «if», seguida de una condición que se comprueba. Si la condición es verdadera, se ejecuta el código especificado. Si la condición no se cumple, se pueden usar las declaraciones «else» y «else if» para manejar otras posibles situaciones, proporcionando bloques de código alternativos según sea necesario. La anidación de condicionales permite decisiones más complejas verificando múltiples condiciones dentro de otras.

Otra estructura un poco menos intuitiva es la de switch-case. Podríamos decir que es una versión más sencilla de escribir que un montón de if-else encadenados. La ventaja principal de esta estructura es su simplicidad cuando hay múltiples opciones posibles.

Además, hemos analizado los operadores de comparación y lógicos, ya que sin ellos no podríamos trabajar con condicionales. Los operadores de comparación incluyen ==, !=, >, >=, <, y <=.

Los operadores lógicos, como && (AND), || (OR), y ! (NOT), permiten combinar y manipular condiciones, haciendo el código más dinámico y eficiente. Utilizando estos operadores, podremos realizar comprobaciones complejas y tomar decisiones basadas en múltiples criterios.

Aunque en este punto la teoría pueda resultar un poco abrumadora, con los ejercicios que hemos resuelto no deberías tener ningún problema para manejarte con estos operadores. Una vez que completes los demás ejercicios propuestos para este tema, verás que no te quedará ninguna duda.

Para hacerte la vida más sencilla, te vuelvo a dejar la lista de todos los operadores. Tenla muy presente, ya que te va a resultar muy útil:

OperadorDescripción
+Suma dos valores
Resta dos valores
*Multiplica dos valores
/Divide el primer valor por el segundo
%Devuelve el resto de la división entera
++Incrementa el valor de la variable en 1
Decrementa el valor de la variable en 1
+=Agrega el valor especificado a la variable
-=Resta el valor especificado de la variable
*=Multiplica la variable por el valor especificado
/=Divide la variable por el valor especificado
==Comprueba si dos valores son iguales
!=Comprueba si dos valores no son iguales
Comprueba si el primer valor es mayor que el segundo
Comprueba si el primer valor es menor que el segundo
>=Comprueba si el primer valor es mayor o igual que el segundo
<=Comprueba si el primer valor es menor o igual que el segundo
&&Operador AND lógico
||Operador OR lógico
!Operador NOT lógico
?:Operador ternario (condicional)
instanceofComprueba si un objeto es una instancia de una clase