style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Rumbo a nuestra Certificación (Cuarta entrega)

Hola a todos los chavos programadores de esta comunidad.

Aqui tenemos la cuarta entrega de textos y ejercicios rumbo a nuestra certificación.

Los temas seleccionados para esta ocasión son:

a) Instrucción if.
b) Instrucción switch.
c) Instrucción for.
d) Instrucción while.
e) Salida forzada de un bucle (sentencias break y continue).
f) Anexo: La clase Math.
g) Ejercicios propuestos.

Recuerden que cualquier duda, comentario o aclaración la pueden realizar en el área correspondiente.

Saludos y felices compilaciones.

-------------------------------------------------

Instrucciones de control.

Java dispone de un juego de instrucciones para controlar el flujo de ejecución de un programa. Se tienen instrucciones alternativas y repetitivas, a continuación se describen cada una de ellas.

Instrucción if.

La instrucción if es una sentencia de tipo alternativa simple que permite comprobar una condición dentro de un programa. En caso de que la condición se cumpla se ejecutará un determinado conjunto de instrucciones, mientras que si no se cumple, se podrá optar por otro conjunto diferente de instrucciones o por no ejecutar ninguna.

El formato de la instrucción if es:

if(condicion) {
        sentencias
} else {
        sentencias
}

A continuación se anexa un ejemplo:

public class InstruccionIf {

        public static void main (String args []) {

                int a = 10, b = 5;
                if(a > b) {
                        System.out.println("El número mayor es: " + a);
                } else {
                        System.out.println("El número mayor es: " + b);
                }

        }

}

Al momento de utilizar dicha instrucción hay que tener en cuenta los siguientes puntos:

a) La condición de comprobación puede ser cualquier expresión cuyo resultado sea de tipo boolean (true o false), en cualquier otro caso se producirá un error de compilación. El siguiente fragmento de código representa una utilización incorrecta de if.

public class InstruccionIf002 {

        public static void main (String args []) {

                int a = 5;

                /*

                La siguiente línea produce un error de compilación
                incompatible types
                found   : int
                required: boolean

                */

                if(a) {
                        System.out.println("Uso incorrecto de if");
                }

        }

}

b) El bloque else es opcional. En este caso, si la condición no se cumple el programa continuará su ejecución en la siguiente línea después de la llave de cierre (}) del if.

c) Cuando el bloque de sentencias, bien de if o bien de else, está formado únicamente por una instrucción, la utilización de las llaves delimitadoras es opcional. No obstante, para una mayor claridad del código, se recomienda su uso en cualquier caso.

d) Las instrucciones if se pueden anidar.

El siguiente ejemplo utiliza una instrucción if para indicarnos si el número almacenado en cierta variable es par o impar.

public class CompruebaPar {

        public static void main (String args[]) {

                int p = 5; // Variable con el número a comprobar

                // Si el resto de la división del número entre dos es cero será par.
                if (p % 2 == 0) {
                        System.out.println("El número " + p + " es par");
                } else {
                        System.out.println("El número " + p + " es impar");
                }

        }

}

La instrucción switch.

Se trata de una instrucción de tipo alternativa múltiple. Permite ejecutar diferentes bloques de instrucciones en función del resultado de una expresión.

Su formato es el siguiente:

switch (expresion) {

        case valor1:
                sentencias;
                break;
        case valor2:
                sentencias;
                break;
        default:
                sentencias;

}

A continuación se anexa un ejemplo de su utilización:

public class SentenciaSwitch {

        public static void main (String args[]) {

                /* Este ejemplo simula la selección de un número para ser adivinado */

                int n = 10;

                switch(n) {
                        case 3: System.out.println("Estás muy lejos del número.");
                                        break;
                        case 5: System.out.println("Estás más cerca.");
                                        break;
                        case 10:System.out.println("¡Enhorabuena!, acertaste.");
                                        break;
                        default:System.out.println("No tienes suerte.");
                                        break;
                }

        }

}

En caso de que el resultado de la expresión coincida con el valor representado por valor1, se ejecutarán las sentencias definidas en este bloque, si no coincide se comparará con valor2, y así sucesivamente. Si el resultado no coincide con ninguno de los valores indicados en los case, se ejecutará el bloque de instrucciones en default.

Sobre el uso de la instrucción switch hay que tener en cuenta los siguientes puntos:

a) Los únicos valores que puede evaluar switch son números enteros de tipo int. Esto incluye, además de int, a aquellos que puedan ser promocionados a dicho tipo (byte, char y short).

b) Un switch puede contener cualquier número de case, aunque no puede haber dos case con el mismo valor.

c) La sentencia break es opcional y se emplea para provocar la finalización del switch al terminar la ejecución de un case. En caso de que un determinado case no incluya esta instrucción y se produzca la ejecución de su bloque de sentencias, al salir de dicho bloque, el programa continuará con la ejecución del siguiente case,independientemente de que el resultado de la expresión coincida o no con el valor indicado en el mismo. A continuación se anexa un ejemplo:

public class InstruccionSwitch {

        public static void main (String args[]) {

                int h = 5;

                switch(h*2) {

                        case 10: System.out.println("El resultado es " + (h*2));

                        case 20: System.out.println("El resultado es demasiado alto");
                                         break;
                        default: System.out.println("El resultado no es correcto");

                }

        }

}

El programa anterior imprimirá en pantalla el siguiente mensaje:

El resultado es 10
El resultado es demasiado alto

d) El bloque default se ejecutará si el resultado de la expresión no coincide con ningún case. Su uso es opcional. Cabe mencionar también que algunos programadores incluyen la instrucción break al finalizar las sentencias de default, su uso no genera error y puede omitirse a consideración de cada estilo.

La instrucción for.

La instrucción repetitiva for permite ejecutar un conjunto de instrucciones un número determinado de veces. Su formato y ejemplo de utilización se muestran a continuación:

for (inicialización; condición; incremento) {
        sentencias
}

El siguiente ejemplo muestra los números del 1 al 10.

public class InstruccionFor {

        public static void main (String args[]) {

                for(int i = 1; i <= 10; i++) {
                        System.out.println(i);
                }

        }

}

La ejecución del bucle for comienza con la instrucción de inicialización, que, como su nombre indica, suele realizar la inicialización de una variable de control, incluyendo su declaración. A continuación, se comprueba la condición. cuyo resultado debe ser siempre de tipo boolean; en caso de que el resultado sea true, se ejecutarán las instrucciones delimitadas por el bloque de llaves, después se ejecutará la instrucción de incremento y volverá a comprobarse la condición. En el momento en que la condición sea false, las instrucciones del bloque no se ejecutarán, continuando el programa en la siguiente línea al bloque de instrucciones.

Sobre la utilización de la instrucción for hay que tener en cuenta lo siguiente:

a) Las instrucciones de control del bucle for (inicialización, condición e incremento) son opcionales. En cualquier caso, el delimitador de instrucciones (;) siempre debe estar presente. Por ejemplo, si se omiten las instrucciones de comparación e incremento, la cabecera del for quedaría:

for(int i = 0; ; )

b) Si se declara una variable en la instrucción de inicialización, ésta será accesible únicamente desde el interior del for.

c) Al igual que sucede con if, las llaves delimitadoras del bloque sólamente son obligatorias si el for está compuesto por más de una instrucción.

El siguiente ejemplo utiliza el bloque for para realizar el cálculo del factorial de un número almacenado en una variable:

public class Factorial {

        public static void main (String args[]) {

                long p = 5; // Variable con el número a calcular
                long r = 1;     // Variable que almacenará el resultado

                for (int i = 1; i <= p; i++) {
                        r *= i;
                }

                System.out.println("El factorial de " + p + " es " + r);

        }

}

La instrucción while.

Permite ejecutar un bloque de instrucciones mientras se cumpla una determinada condición dentro de un programa. Los dos posibles formatos que admite esta isntrucción y un ejemplo de utilización se anexan a continuación:

while (condición) {
        sentencias
}
do {
        sentencias
} while (condición);

El siguiente ejemplo muestra los números del 10 al 1.

public class InstruccionWhile {

        public static void main (String args[]) {

                int a = 10;

                while (a > 0) {
                        System.out.println(a);
                        a--;
                }

        }

}

El siguiente programa utiliza un while para calcular la suma de todos los números enteros entre dos dados. En el momento en que la suma parcial alcance o supere el valor de 1,000 se dejará de realizar la operación.

public class InstruccionWhile002 {

        public static void main (String args[]) {

                int n1 = 5; // Límite inferior (número más pequeño)
                int n2 = 10; // Límite superior (número más grande)
                int res = n1; // Variable que almacena el resultado

                while (res <= 1000 && n1<n2) {
                        res += ++n1; // Incrementa a la variable n1 y lo acumula a las sumas parciales
                }

                System.out.println("El resultado de la suma es: " + res);

        }

}

Salida forzada de un bucle.

Las instrucciones repetitivas for y while, cuentan con dos instrucciones que permiten abandonar la ejecución del bloque de instrucciones antes de su finalización. Estas instrucciones son: break y continue.

Sentencia break.

Ya se ha visto la utilidad del break en una sentencia switch, sin embargo, su uso también puede extenderse a las instrucciones repetitivas. En éstas, la utilización de break provoca una salida forzada del bucle, continuando la ejecución del programa en la primera sentencia situada después del mismo.

En el siguiente ejemplo se detiene la ejecución del for al producirse una determinada situación:

public class EjemploBreak {

        public static void main (String args[]) {

                int numero = 6;
                boolean acierto = false;

                for (int i = 1; i <= 10; i++) {

                        int aleatorio = (int)(Math.floor(Math.random()*10+1));

                        if(aleatorio == numero) {
                                // Si se acierta al número se termina la ejecución del programa
                                acierto = true;
                                System.out.println("Se acertó al número, el cual es: " + numero);
                                break;
                        }

                }

        }

}

Sentencia continue.

La instrucción continue, provoca que el bucle detenga la iteración actual y pase, en el caso de for, a ejecutar la instrucción de incremento o, en el caso de while, a comprobar la condición de entrada.

El siguiente ejemplo suma números aleatorios entre 1 y 10, mientras la suma total sea menor a 1,000. La utilización de continue en este ejemplo impide que los números pares sean sumados:

public class EjemploContinue {

        public static void main (String args[]) {

                int suma = 0;

                while (suma < 1000) {

                        int aleatorio = (int)(Math.floor(Math.random()*10+1));

                        if(aleatorio % 2 == 0) {
                                continue;
                        }

                        // Sólo se sumarán los números impares
                        suma += aleatorio;

                }

                System.out.println("El resultado de la suma es: " + suma);

        }

}

Anexo.

Una biblioteca (library) es un conjunto de clases que permiten un desarrollo más fácil de programas. Generalmente los compiladores contienen librerías de clases o pueden ser adquiridas de terceras personas. Las clases de una biblioteca contienen métodos que son útiles para los programadores pero que no forman parte del lenguaje.

A veces las bibliotecas son llamadas API's (Application Programmer Interface ). Por ejemplo el Java Swing API que es un conjunto de clases que definen componentes gráficos usados para crear interfaces gráficas de usuario.

Las clases de la librería estándar de Java están agrupadas en paquetes (packages).

La clase Math.

La clase Math ofrece un gran número de funciones matemáticas básicas. La siguiente tabla muestra los métodos utilizados en los ejemplos anteriores; donde la palabra reservada static indica que el método puede ser invocado a través del nombre de la clase.

a) static double floor (double num): Entero más grande menor o igual a "num".
b) static double random (): Número aleatorio entre 0 (inclusive) y 1 (inclusive).

Para más información sobre la clase Math se recomienda consultar la documentación original en:

http://java.sun.com/javase/6/docs/api/index.html

Ejercicios propuestos.

Se pide a los programadores novatos que intenten realizar los dos ejercicios que a continuación se describen, esto con la finalidad de poner en práctica los conocimientos adquiridos.

Práctica No. 1.

Desarrollar un programa que a partir de dos números enteros dados (dos números cualesquiera almacenados en variables), muestre en pantalla la suma de todos los números pares comprendidos entre ambos.

Práctica No. 2.

Se relizarán dos versiones del programa. En la versión anterior, todo el código será incluido en el método main. En esta segunda versión, la clase contará con dos métodos: suma(), que devolverá el resultado de la suma a partir de los números recibidos y main(), que realizará la llamada a suma() y mostrará el resultado en pantalla.

Cabe mencionar que en la siguiente entrega se anexaran los mismos ejercicios resueltos. No olvidemos que la práctica es fundamental.

Quedamos en espera de su participación.

-------------------------------------------------
Jhanno Foulds Gaunt - Km3
Miércoles, 20 de Mayo del 2009.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Dudas y sugerencias

Dudas:
- ¿Van a poner en una próxima entrega el ciclo for mejorado?
- ¿No sería conveniente utilizar en las sentencias System.out.println() las facilidades tipo printf?

Sugerencia:
- Cambiar el vínculo al JavaDoc del JDK 1.5, ya que la versión 1.3 de Java ya quedó hace mucho tiempo descontinuada.

Saludos

Javier

Imagen de drac94

Falto un ciclo

Bueno no falto, mas bien falto ver una de sus implementaciones, me refiero al ciclo for implementado como un ciclo for-each para iterar sobre colecciones de objetos

y como dice javier, hay que cambiar el link de referencia, pero pues si hablamos de actualidad xq mejor no ponemos el vinculo hacia la version 6, para estar mas actualizados no
http://java.sun.com/javase/6/docs/api/index.html

Saludos

Imagen de Jhanno

Actualización

Les menciono que la entrada del blog ha sido actualizada con la documentación más reciente.

En próximas entregas se anexarán los temas sugeridos.

Gracias por el aporte.

Saludos.

Imagen de benek

Muy buen material Jhanno...

Muy buen material Jhanno... Estoy trabajando en el site de la comunidad para poder integrar ordenadamente este tipo de materiales como artículos con secciones y todo.

Javier Benek

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">