Instrucciones condicionales

Instrucciones condicionales.

Comprobación de condiciones.

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);

 

  }

}

 

Regresar.