En cualquier lenguaje de programación es habitual tener que comprobar si se
cumple una cierta condición. La forma "normal" de conseguirlo
es empleando una construcción que recuerda a:
SI
condición_a_comprobar ENTONCES pasos_a_dar
En el caso de
Java, la forma exacta será empleando if (si, en inglés), seguido por la
condición entre paréntesis, e indicando finalmente entre llaves los pasos que
queremos dar si se cumple la condición, así :
if (condición) {
sentencias }
Por ejemplo,
if (x == 3) {
System.out.println( "El valor es correcto" );
resultado = 5;
}
Nota: Si sólo queremos dar un paso en caso de que se
cumpla la condición, no es necesario emplear llaves. Las llaves serán
imprescindibles sólo cuando haya que hacer varias cosas:
if (x == 3)
System.out.println( "El valor es correcto" );
Una primera mejora,
que también permiten muchos lenguajes de programación, es indicar qué hacer en
caso de que no se cumpla la condición. Sería algo parecido a
SI condición_a_comprobar ENTONCES pasos_a_dar
EN_CASO_CONTRARIO pasos_alternativos
que en Java escribiríamos así:
if (condición) { sentencias1 } else { sentencias2
}
Por ejemplo,
if (x == 3) {
System.out.println( "El valor es correcto" );
resultado = 5;
}
else {
System.out.println( "El valor es incorrecto" );
resultado = 27;
}
Si queremos
comprobar varias condiciones, podemos utilizar varios if - else - if -
else - if encadenados, pero tenemos una forma más elegante en Java de elegir
entre distintos valores posibles que tome una cierta expresión. Su
formato es éste:
switch (expresion) {
case valor1: sentencias1; break;
case valor2: sentencias2; break;
case valor3: sentencias3; break;
...
// Puede haber más valores
}
Es decir, después
de la orden switch indicamos entre paréntesis la expresión que queremos
evaluar. Después, tenemos distintos apartados, uno para cada valor que queramos
comprobar; cada uno de estos apartados se precede con la palabra case,
indica los pasos a dar si es ese valor el que se da, y terminar con break.
Un ejemplo sería:
switch ( x * 10) {
case 30: System.out.println( "El valor de x era 3" ); break;
case 50: System.out.println( "El valor de x era 5" ); break;
case 60: System.out.println( "El valor de x era 6" ); break;
}
También podemos
indicar qué queremos que ocurra en el caso de que el valor de la expresión no
sea ninguno de los que hemos detallado:
switch (expresion) {
case valor1: sentencias1; break;
case valor2: sentencias2; break;
case valor3: sentencias3; break;
...
// Puede haber más valores
default:
sentencias;
// Opcional: valor por defecto
}
Por ejemplo, así:
switch ( x * 10) {
case 30: System.out.println( "El valor de x era 3" ); break;
case 50: System.out.println( "El valor de x era 5" ); break;
case 60: System.out.println( "El valor de x era 6" ); break;
default: System.out.println( "El valor de x no era 3, 5 ni 6" );
break;
}
Podemos
conseguir que en varios casos se den los mismos pasos, simplemente
eliminado la orden "break" de algunos de ellos. Así, un ejemplo algo
más completo podría ser:
switch ( x ) {
case 1:
case 2:
case 3:
System.out.println( "El valor de x estaba entre 1 y 3" );
break;
case 4:
case 5:
System.out.println( "El valor de x era 4 o 5" );
break;
case 6:
System.out.println( "El valor de x era 6" );
valorTemporal = 10;
System.out.println( "Operaciones auxiliares completadas" );
break;
default:
System.out.println( "El valor de x no estaba entre 1 y 6" );
break;
}
Un poco más adelante
propondremos ejercicios que permitan afianzar todos estos conceptos.
Existe una
construcción adicional, que permite comprobar si se cumple una condición y
devolver un cierto valor según si dicha condición se cumple o no. Es lo que se
conoce como el "operador condicional (?)":
condicion ? resultado_si cierto : resultado_si_falso
Es decir, se
indica la condición seguida por una interrogación, después el valor que hay que
devolver si se cumple la condición, a continuación un símbolo de "dos puntos"
y finalmente el resultado que hay que devolver si no se cumple la condición.
Es frecuente
emplearlo en asignaciones (aunque algunos autores desaconsejan su uso porque
puede resultar menos legible que un "if"), como en este ejemplo:
x = (a == 10) ? b*2 : a ;
En este caso, si a
vale 10, la variable tomará el valor de b*2, y en caso contrario tomará el
valor de a. Esto también se podría haber escrito de la siguiente forma, más
larga pero más legible:
if (a == 10) x = b*2;
else x = a;
Ejemplo:
Hacer un programa, que
dados tres números determine cual es el mayor y cual es el menor.
/**
* Title: Mayor y menor
* Description: Dados tres numeros dice cual es el mayor y cual el
menor
* Copyright: Copyright (c) 2003
*
Company: UMSNH
*
author Dr. Felix Calderon Solorio
*
version 1.0
*/
class ej003
{
public static void main (String args[])
{
int a, b, c, d;
a= 4; b = 2; c = 3;
d = (a > b) ? a : b;
d = (d > c) ? d : c;
System.out.println("el Mayor es " + d);
// otra forma
if(a> b) d = a;
else d = b;
if(d< c) d = c;
System.out.println("el Mayor es " + d);
}
}