Listado completo de tutoriales
80 - Operador condicional: (condicion)?valor1:valor2 |
Cuando hay que tomar decisiones dentro de un algoritmo teníamos hasta ahora dos estructuras condicionales:
El única comando que se puede utilizar en todas las situaciones es el if/else, en algunas situaciones se puede remplazar por el switch y ahora veremos una tercer forma.
No se trata de una estructura condicional sino de un operador condicional, veremos que también se lo puede utilizar en algunos casos particulares y que tiene por objetivo escribir código más conciso.
La sintaxis del operador condicional:
[valor] = (condicion) ? valor1 : valor2
La condición del operador es igual a lo que hacemos en un if clásico. Si el resultado de la condición se verifica verdadero luego el 'valor1' se almacena en [valor] y si la condición se verifica falsa el 'valor2' se almacena en [valor].
Por ejemplo si queremos almacenar en una variable si la persona es mayor de edad podemos hacerlo con la siguiente sintaxis:
int edad = 3; String estado = edad >= 18 ? "Mayor" : "Menor"; System.out.println(estado); // Menor
La variable estado almacena la cadena "Menor" debido a que la condición del operador se verifica falsa.
Como vemos es más concisa la codificación que plantearlo con un if/else:
String estado; if (edad >= 18) estado = "Mayor"; else estado = "Menor"; System.out.println(estado); // Menor
Generar 10 valores aleatorios comprendidos entre 1 y 50. Mostrar cada uno de los valores y un mensaje indicando si tiene 1 o 2 dígitos.
public class ValoresAleatorios { public static void main(String[] ar) { for (int f = 0; f < 10; f++) { int aleatorio = (int) (Math.random() * 50) + 1; System.out.println("El valor " + aleatorio + " tiene " + (aleatorio < 10 ? "1 dígito" : "2 dígitos")); } } }
El resultado de ejecutar la aplicación es:
El valor devuelto por el operador condicional se lo pasamos directamente al método 'println' para que lo muestre:
System.out.println("El valor "+aleatorio+" tiene " + (aleatorio < 10 ? "1 dígito" : "2 dígitos"));
Es obligatorio que todo el operador condicional se encuentre entre paréntesis para que se evalúe.
Mostrar los números del 1 al 100 e indicar si se trata de un número par o impar.
public class ParesImpares { public static void main(String[] ar) { for (int f = 1; f <= 100; f++) System.out.println(f + " es " + (f % 2 == 0 ? "par" : "impar")); } }
Codificar un programa que muestre en pantalla los números del 1 al 100, sustituyendo los múltiplos de 3 por el palabra "Fizz" y, a su vez, los múltiplos de 5 por "Buzz". Para los números que, al mismo tiempo, son múltiplos de 3 y 5, mostrar el mensaje "FizzBuzz".
Este sencillo programa y otros similares se los ha utilizado para descartar candidatos que se presentan a un puesto de programador, si no lo puede resolver en unos pocos minutos significa que no tiene sentido entrevistarlo por temas profundos de programación por el que se esta buscando un candidato.
public class FizzBuzz { public static void main(String[] ar) { for (int f = 1; f <= 100; f++) System.out.println(f % 3 == 0 && f % 5 == 0 ? "FizzBuzz" : (f % 3 == 0 ? "Fizz" : (f % 5 == 0 ? "Buzz" : f))); } }
El empleo del operador condicional debe hacerse con cuidado ya que hace menos legible el código.
Podemos ver que el programa es mucho más conciso que utilizar una serie de if anidados:
public class FizzBuzz { public static void main(String[] ar) { for (int f = 1; f <= 100; f++) if (f % 3 == 0 && f % 5 == 0) System.out.println("FizzBuzz"); else if (f % 3 == 0) System.out.println("Fizz"); else if (f % 5 == 0) System.out.println("Buzz"); else System.out.println(f); } }
Se tienen los siguientes vectores paralelos con las notas y nombres de alumnos:
String[] alumnos = { "juan", "ana", "luis", "carla", "pedro", "laura", "maria" }; int[] notas = { 3, 7, 10, 9, 2, 8, 5 };
Generar otro vector paralelo con el String "libre" si la nota es menor a 4 y la cadena "regular" si la nota es mayor o igual a cuatro.
Emplear el operador condicional para cargar el vector paralelo.
Ver videopublic class GenerarEstados { public static void main(String[] args) { String[] alumnos = { "juan", "ana", "luis", "carla", "pedro", "laura", "maria" }; int[] notas = { 3, 7, 10, 9, 2, 8, 5 }; String[] estados = new String[notas.length]; for (int f = 0; f < notas.length; f++) estados[f] = notas[f] >= 4 ? "regular" : "libre"; for (int f = 0; f < notas.length; f++) System.out.println(alumnos[f] + " tiene una nota " + notas[f] + " esta " + estados[f]); } }