Es muy habitual que durante el desarrollo de un programa tengamos que
comprobar que se cumple una determinada condición, para que, si se cumple, se ejecuten una o varias instrucciones.
import java.util.InputMismatchException;
import java.util.Scanner;
public class BloqueIf {
public static void main(String[] args) {
boolean numero=false;
int edad=0;
System.out.print("¿Cúantos años tienes?: ");
while (numero==false) {
try {
Scanner mi_scanner = new Scanner(System.in);
edad = mi_scanner.nextInt();
numero = true;
} catch (Exception e) {
System.out.print("Por favor, debes introducir un número entero. ");
}
}
if (edad<18){
System.out.print("Lo siento, todavía no puedes votar.");
System.out.print("Solo tienes "+edad+" años.");
}
if (edad>=18){
System.out.print("Puedes tomar una papeleta y votar.");
System.out.print("Tienes "+edad+" años.");
}
}
}En este programa se ejecuta el bloque del primer if o el segundo, dependiendo de la edad.
Posible resultado:
¿Cúantos años tienes?: 34
Puedes tomar una papeleta y votar.Tienes 34 años.Operadores de comparación. Disponemos de varios operadores de comparación:
* if (a == b) : (nos comprueba si a es igual a b)
recordar que son dos signos = seguidos
*ATENCIÓN: si lo que tenemos que comparar son dos variables String (o dos objetos), debemos de utilizar el siguiente formato:
if (texto1.equals(texto2))
* if (a > b) : (comprueba si a es mayor que b)
* if (a < b): (si a es menor que b)
* if (a <= b): (si a es menor o igual que b)
* if (a >=b): (si a es mayor o igual que b)
* if (a!= b): (si a no es igual a b)
A cualquiera de estos operadores, le podemos añadir una negación “!” que hace que el sentido de la comparación sea justo el contrario.
public class BloqueIf2 {
public static void main(String[] args) {
int veces=0;
int[] mi_lista={1, 5, 12, 7, 14, 23, 8};
for (int numero:mi_lista){
if (!(numero<11)){
System.out.println("El número "+numero+" es mayor que 10.");
veces+=1;
}
}
System.out.println("Hemos encontrado "+veces+" números mayores que 10.");
}
}Resultado:
El número 12 es mayor que 10.
El número 14 es mayor que 10.
El número 23 es mayor que 10.
Hemos encontrado 3 números mayores que 10.La comparación de if sería: “Si número NO es menor que 11….”
if condición_1 && condición_2….La sentencia if permite que se compruebe más de una condición al mismo tiempo. Por ejemplo, si añadimos la opción && obligamos a que se cumpla también la siguiente condición para que se ejecute el bucle condicional. Podemos añadir tantos && como deseemos.
public class BloqueIf2 {
public static void main(String[] args) {
int alto=39;
int ancho=30;
int profundidad=20;
if (alto<=40 && ancho<=30 && profundidad<=20){
System.out.println("La maleta puede viajar en cabina");
System.out.println("Gracias por viajar con nosotros.");
}
else{
System.out.println("Lo sentimos, debe usted facturar su maleta.");
}
}
}El resultado será:
La maleta puede viajar en cabina
Gracias por viajar con nosotros.if condición_1 || condición_2….La opción || nos permite comparar varias opciones, y el bucle condicional se ejecutará si se cumple una (o varias) de las opciones propuestas.
public class BloqueIf2 {
public static void main(String[] args) {
int alto=39;
int ancho=33;
int profundidad=20;
if (alto>40 || ancho>30 || profundidad>20){
System.out.println("Lo sentimos, debe usted facturar su maleta.");
}
else{
System.out.println("La maleta puede viajar en cabina");
System.out.println("Gracias por viajar con nosotros.");
}
}
}En este caso, la opción ancho es superior al permitido, por lo
que el resultado será:
Lo sentimos, debe usted facturar su maleta.if condición_1 ^ condición_2…Esta opción que está representada por el acento circunflejo es conocida en algunos lenguajes de programación como XOR. Consiste en comprobar que se cumple una condición y solo una de las propuestas.
El acento circunflejo se escribe como si fuésemos a acentuar con este acento una vocal, pero seguimos con la pulsación de un espacio en blanco, como si estuviésemos acentuando el espacio en blanco.
public class BloqueIf2 {
public static void main(String[] args) {
boolean matematicas=false;
boolean literatura=true;
boolean geografia=false;
if (matematicas ^ literatura ^ geografia){
System.out.println("Gracias por elegir una optativa.");
System.out.println("Puede seguir rellenando la solicitud.");
}
else{
System.out.println("Lo siento. No ha seguido las instrucciones.");
System.out.println("Debe de comenzar de nuevo.");
}
}
}Como solo una de las opciones es "true", el resultado es:
Gracias por elegir una optativa.
Puede seguir rellenando la solicitud.Si cambiamos el valor de geografia por «true», habrá dos opciones como «true», por lo tanto el resultado sería:
Lo siento. No ha seguido las instrucciones.
Debe de comenzar de nuevo.En este caso el usuario habrá elegido dos optativas, cuando se le había indicado en las instrucciones que debía elegir solo una. Si no hubiese elegido ninguna (y las tres fuesen “False”), tampoco estaría correcto, ya que debe de elegir una. Debe de haber una condición (y solo una) que sea verdadera.
if en estructura de datos. Con una sentencia «if» podemos comprobar si un elemento está incluido en una estructura de datos. Dependiendo del tipo de estructura el método para utilizarlo es diferente.
import java.util.ArrayList;
public class BloqueIf2 {
public static void main(String[] args) {
ArrayList<String> mi_lista= new ArrayList<>();
mi_lista.add("Messi");
mi_lista.add("Pedri");
mi_lista.add("Cucurella");
String mi_preferido="Cucurella";
if (mi_lista.contains(mi_preferido)){
System.out.println(mi_preferido+" está en la lista.");
}
}
}El resultado será:
Cucurella está en la lista.Para un ArrayList o un HashSet, utilizamos el método .contains , como el visto en el ejemplo anterior.
En un HashMap, podemos utilizar el método .containsKey si buscamos dentro de las claves, o el método .contrainsValue si buscamos dentro de los valores:
import java.util.HashMap;
public class BloqueIf2 {
public static void main(String[] args) {
HashMap<String,Integer> mi_lista= new HashMap<>();
mi_lista.put("Messi",40);
mi_lista.put("Pedri",27);
mi_lista.put("Cucurella",24);
if (mi_lista.containsKey("Messi")){
System.out.println("Messi"+" está en la lista.");
}
if (!mi_lista.containsValue(22)){
System.out.println("Ningún jugador tiene 22 años.");
}
}
}Resultado:
Messi está en la lista.
Ningún jugador tiene 22 años.Si queremos comprobar un Array, debemos recorrer la estructura completa, ya que no existe ningún método para hacer la comprobación directa.
public class BloqueIf2 {
public static void main(String[] args) {
int mi_numero = 5;
boolean encontrado = false;
int[] mi_lista = {1, 5, 12, 7, 14, 23, 8};
for (int numero : mi_lista) {
if ((numero == mi_numero)) {
System.out.println(mi_numero + " está en la lista.");
encontrado=true;
break;
}
}
if (!encontrado) {
System.out.println(mi_numero + " no está en la lista.");
}
}
}Resultado:
5 está en la lista.if condición / else Una sentencia if-else nos permite ejecutar un bloque cuando se cumple una condición (o grupo de condiciones), y ejecutar otro bloque cuando no se cumple:
public class Prueba {
public static void main(String[] args){
int km=33;
if (km<30) {
System.out.println("La carretera es demasiado corta.");
}
else{
System.out.println("La carretera es suficientemente grande.");
System.out.println("Buen trabajo.");
}
}
}Resultado:
La carretera es suficientemente grande.
Buen trabajo.if condición_1 / else if condición_2 / else if condición_3…Podemos crear una construcción que nos compruebe varias posibilidades y se ejecute la más adecuada.
En dicho bloque se comprueba la condición que contenga if, si no se cumple se comprueba la que contenga el primer else if. Si tampoco se cumple saltaría al siguiente else if, y así sucesivamente (hasta agotar los else if). Desde el momento en que se cumpla una de las condiciones, se ejecutaría el código que le acompaña y el programa saldría bloque. Si no se cumple ninguna, se ejecutaría el código que acompañe al else (si es que existe, ya que no siempre aparece).
public class Prueba {
public static void main(String[] args) {
int altura = 20;
if (altura > 100) {
System.out.println("El bloque es muy alto");
} else if (altura > 50) {
System.out.println("El bloque es un poco alto.");
}
else if (altura >= 20) {
System.out.println("La altura es correcta.");
}
else {
System.out.println("El bloque es demasiado bajo");
}
}
}El resultado será:
La altura es correcta.En este tipo de construcciones debemos prestar especial atención al orden de colocación de las condiciones a analizar. Si colocamos antes una condición que incluya a otra posterior, la segunda no llegará nunca a comprobarse. Por ejemplo, la siguiente construcción sería totalmente errónea, ya que la segunda y tercera condición nunca llegarían a analizarse.
public class Prueba {
public static void main(String[] args) {
int altura = 120;
if (altura >= 20) {
System.out.println("La altura es correcta.");
} else if (altura > 50) {
System.out.println("El bloque es un poco alto.");
}
else if (altura >100) {
System.out.println("El bloque es demasiado alto.");
}
else {
System.out.println("El bloque es demasiado bajo");
}
}
}En este caso altura vale 120 y el resultado no es el esperado,
ya que seguirá dando:
La altura es correcta.Cuando estamos elaborando un programa, en ocasiones necesitamos dejar una o varias opciones vacías para posteriormente poderle añadir más código. En este caso sencillamente dejamos la opción entre llaves (sin código).
public class Prueba {
public static void main(String[] args) {
int altura =0;
if (altura==0){
} else if (altura >100) {
System.out.println("El bloque es demasiado alto.");
} else if (altura > 50) {
System.out.println("El bloque es un poco alto.");
} else if (altura >=20) {
System.out.println("La altura es correcta");
}
else {
System.out.println("El bloque es demasiado bajo");
}
System.out.println("Fin del programa.");
}
}El resultado será:
Fin del programa.En este código anterior, hemos dejado vacía la opción cuando altura sea igual a 0.
