lección 10: estructuras de controlece.uprm.edu/~jnavarro/lecestrcontrolbw.pdf · lección 10:...

39
ICOM 4015 : Programación Avanzada Estructuras de Control José Navarro 2012 Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, Big Java Late Objects, Caps 3-4 C. Horstmann, Java Concepts, 6ta. Ed., Caps 5-6 Objetivos Explicar la operación de diferentes estructuras de control Diseñar programas que utilicen estructuras de control Diseñar programas utilizando apropiadamente la estructura if Diseñar programas utilizando apropiadamente la estructura if ... else ... Explicar el funcionamiento de los operadores relacionales Diseñar código que utilice apropiadamente los operadores relacionales Listar las funciones lógicas disponibles en el lenguaje Diseñar código que utilice apropiadamente las funciones lógicas Indentar adecuadamente programas en Java Diseñar programas utilizando apropiadamente la estructura while Diseñar programas utilizando apropiadamente la estructura for Diseñar programas utilizando apropiadamente la estructura switch Diseñar programas utilizando apropiadamente la estructura do ... while Bosquejo 10.0 Introducción 10.1 Estructura if 10.2 Estructura if...else 10.3 Estructura while 10.4 Estructura for 10.5 Estructura switch para Selecciones Múltiples (utilizando el comando break) 10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando break) 10.7 Problemas de práctica Comentario Antes de comenzar esta lección queremos indicar que la misma es bastante extensa. La razón para ello es que quisimos incluir todas las estructuras de control en una sola lección. El profesor del curso le indicará en qué fechas tiene que estudiar cuáles secciones de la lección.

Upload: others

Post on 01-Oct-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Lección 10: Estructuras de Control

Autor: José Navarro

Referencias:

C. Horstmann, “Big Java Late Objects”, Caps 3-4

C. Horstmann, “Java Concepts”, 6ta. Ed., Caps 5-6

Objetivos

Explicar la operación de diferentes estructuras de control

Diseñar programas que utilicen estructuras de control

Diseñar programas utilizando apropiadamente la estructura if

Diseñar programas utilizando apropiadamente la estructura if ... else ...

Explicar el funcionamiento de los operadores relacionales

Diseñar código que utilice apropiadamente los operadores relacionales

Listar las funciones lógicas disponibles en el lenguaje

Diseñar código que utilice apropiadamente las funciones lógicas

Indentar adecuadamente programas en Java

Diseñar programas utilizando apropiadamente la estructura while

Diseñar programas utilizando apropiadamente la estructura for

Diseñar programas utilizando apropiadamente la estructura switch

Diseñar programas utilizando apropiadamente la estructura do ... while

Bosquejo

10.0 Introducción

10.1 Estructura if

10.2 Estructura if...else

10.3 Estructura while

10.4 Estructura for

10.5 Estructura switch para Selecciones Múltiples (utilizando el comando

break)

10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando

break)

10.7 Problemas de práctica

Comentario

Antes de comenzar esta lección queremos indicar que la misma es bastante extensa. La

razón para ello es que quisimos incluir todas las estructuras de control en una sola

lección. El profesor del curso le indicará en qué fechas tiene que estudiar cuáles

secciones de la lección.

Page 2: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

10.0 Introducción

En esta lección conoceremos las estructuras de control que permitirán a nuestros

programas tomar decisiones y realizar repeticiones. Estas son las características que

hacen a los programas de computadoras tan útiles, poder tomar decisiones y realizar

cantidades extraordinarias de repeticiones sin cansarse.

Las expresiones lógicas son utilizadas mayormente en la construcción de estructuras de

control. Las estructuras de control permiten alterar la secuencia de la ejecución del

programa. Un resumen de las estructuras de control se presenta en la siguiente tabla:

Tabla 1: Resumen de las Estructuras de Control

while (condicion)

{

bloque de instrucciones

}

if (condicion)

{

bloque de instrucciones

}

else

{

otro bloque de instrucciones

}

if (condicion)

{

bloque de instrucciones

}

Forma

Repetición: repite el bloque

de instrucciones mientras la

condición es cierta

while

Condicional: ejecuta el

primer bloque de

instrucciones si la condición

es cierta y el segundo en

caso contrario

if …else

Condicional: ejecuta el

bloque de instrucciones se la

condición es cierta

if

función Estructura

Page 3: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Tabla 1: (continuación)

switch (expr)

{

case const1:

bloque1 de instrucciones1

<break>;

case const2:

bloque2 de instrucciones

<break;>

<default:

bloqued de instrucciones>

}

for (expr1; expr2; expr3) {

bloque de instrucciones

}

Forma

Condicional: expr representa

un valor entero o tipo char.

El valor de char se compara,

comenzando por el tope, con

cada uno de los valores a la

derecha de los case. Si los

valores son iguales se ejecuta

el bloque de instrucciones

que le sigue. Si un break se

encuentra al final se termina

el switch de lo contrario se

ejecutan los demás bloques

que están debajo. La opción

default indica el proceso que

será ejecutado en caso de que

ningún case sea cierto.

switch

Repetición: expr1 es una expresión en la que se

inicializa el valor de una

variable de control. xxpr2

representa la condición que

debe ser cierta para que el

ciclo se continue repitiendo.

expr3 es la acción que se

ejecutará al final de cada

ciclo.

for

función Estructura

Page 4: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Tabla 1: (continuación)

Repetición: similar al while

pero en este caso la

condición se verifica luego

de ejecutar el bloque de

instrucciones. Esta

estructura garantiza que el

bloque se ejecutará al menos

una vez, ya que la condición

no se verifica hasta que el

bloque es ejecutado al menos

una vez.

do

{

bloque de instrucciones

} while (condicion);

do…while

En las próximas subsecciones presentamos ejemplos sobre la implementación de

estructuras en Java. Para facilitar el entendimiento de las mismas presentamos un pedazo

genérico de flujograma en donde se implementa una estructura de control (como un

condicional) y al lado derecho presentamos cómo se codificaría en Java. Seguido del

código genérico presentamos un ejemplo utilizando una sección de un flujograma y el

código correspondiente al lado derecho. Una vez se ha presentado la construcción

general de la estructura se da uno o más ejemplos de programas utilizando la misma.

Page 5: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Page 6: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa If01.java

1 //If01.java

2 //programa para leer dos valores e imprimir

3 //el mayor de ambos

4

5 import java.util.Scanner;

6 public class If01

7 {

8 public static void main( String args[] )

9 {

10 Scanner input = new Scanner( System.in );

11

12 //Declaración de variables

13 int valor1,

14 valor2,

15 mayor = 0; //es necesrio inicializarla

16 //porque sus valores siempre

17 //se actualizarán en condicionales

18

19 System.out.print("Entre el primer valor : ");

20 valor1 = input.nextInt();

21 System.out.print("Entre el segundo valor : ");

22 valor2 = input.nextInt();

23

24 if (valor1 > valor2)

25 {

26 mayor = valor1;

27 }

28 if (valor2 >= valor1)

29 {

30 mayor = valor2;

31 }

32

33 System.out.println("El valor mayor es: " + mayor);

34 }

35 }

Explicación

Este programa muestra el uso de la estructura if para la toma de decisiones. El programa

lee dos valores e imprime el mayor de los dos.

La línea 24 analiza la condición valor1 > valor2 (En Java las condiciones se escriben

siempre entre paréntesis) Si la condición es cierta, se ejecutará el bloque de instrucciones

Page 7: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

que se encuentra debajo (líneas 25 a la 27). Si el bloque de instrucciones se compone de

más de una instrucción es necesario encerrarlo entre corchetes ‘{‘ para que el compilador

entienda que el grupo completo de instrucciones será ejecutado si la condición es cierta.

Si el bloque de instrucciones se compone de una sola instrucción (como en este caso) no

es necesario escribir los corchetes, sin embargo, es preferible escribirlos de forma tal que

la estructura de los programas sea consistente, así que siempre usaremos los corchetes.

La línea 28 analiza la condición valor2 >= valor1. Si la condición es cierta entonces se

ejecuta el bloque de instrucciones que se encuentra en las líneas de la 29 a la 31.

Como pueden notar en el programa el valor de la variable mayor se modifica dentro de

los dos condicionales (líneas 26 y 30). Si el valor de mayor no se hubiese inicializado

(asignado un valor inicial) en la línea 15, o en otra línea que no dependiera de una

condición, Java habría dado un error porque nos estaríamos arriesgando a utilizar una

variable en la línea 33 que no tenía valor asignado. Si analizamos el código notamos es

uno de los dos condicionales obligatoriamente tiene que ser cierto y por lo tanto mayor

siempre tendría un valor antes de llegar a la línea 33, pero el compilador no es “tan

inteligente”. Pruebe compilar el programa sin asignarle un valor cuando declare la

variable.

Un ejemplo de la corrida de este programa se presenta en la siguiente figura.

¼¼§ÏEntre el primer valor : 4 ¼¼§ÏEntre el segundo valor : 3 ÏϧÏEl valor mayor es: 4

Page 8: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

10.2 Estructura if...else

condicion

bloque 1

nota >= 90

print

“A”

bloque 2

print

“B”

Ejemplo

:

if (condicion)

{

bloque1

}

else

{

bloque2

}

if (nota >= 90)

{

System.out.println(“A”);

}

else

{

System.out.println(“B”);

}

Page 9: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa If02.java

1 //If02.java

2 //programa para leer dos valores e imprimir

3 //el mayor de ambos usando la estructura

4 //if ... else ...

5

6 import java.util.Scanner;

7 public class If02

8 {

9 public static void main( String args[] )

10 {

11 Scanner input = new Scanner( System.in );

12

13 //Declaración de variables

14 int valor1,

15 valor2,

16 mayor = 0; //es necesrio inicializarla

17 //porque sus valores siempre

18 //se actualizarán en condicionales

19

20 System.out.print("Entre el primer valor : ");

21 valor1 = input.nextInt();

22 System.out.print("Entre el segundo valor : ");

23 valor2 = input.nextInt();

24

25 if (valor1 > valor2)

26 {

27 mayor = valor1;

28 }

29 else

30 {

31 mayor = valor2;

32 }

33

34 System.out.println("El valor mayor es: " + mayor);

35 }

36 }

Explicación

Este programa realiza la misma la misma función que If01 pero en lugar de utilizar dos

estructuras if utiliza una estructura if...else. Si la condición en la línea 25 es cierta

entonces se ejecutará la instrucción en la línea 27, de lo contrario se ejecutará la

instrucción en la línea 31. Note que esta alternativa es mejor a la de utilizar dos if porque

Page 10: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

aparte de requerir menos código se ejecuta más eficientemente. Utilizando dos if se

realizan dos comparaciones mientras que aquí se ejecuta sólo una. Un ejemplo de la

corrida se presenta a continuación.

¼¼§ÏEntre el primer valor : 6 ¼¼§ÏEntre el segundo valor : 9 ÏϧÏEl valor mayor es: 9

Page 11: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

1 //If03.java

2 //programa para leer tres valores e imprimir

3 //el mayor usando estructuras if ... else ...

4 //anidadas

5

6 import java.util.Scanner;

7 public class If03

8 {

9 public static void main( String args[] )

10 {

11 Scanner input = new Scanner( System.in );

12

13 //Declaración de variables

14 int valor1,

15 valor2,

16 valor3,

17 mayor = 0;

18

19 System.out.print("Entre el primer valor : ");

20 valor1 = input.nextInt();

21 System.out.print("Entre el segundo valor : ");

22 valor2 = input.nextInt();

23 System.out.print("Entre el tercer valor : ");

24 valor3 = input.nextInt();

25

26 if ( (valor1 >= valor2) && (valor1 >= valor3) )

27 {

28 mayor = valor1;

29 }

30 else

31 {

32 if (valor2 >= valor3)

33 {

34 mayor = valor2;

35 }

36 else

37 {

38 mayor = valor3;

39 }

40 }

41

42 System.out.println("El valor mayor es: " + mayor);

43 }

44 }

Page 12: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Explicación

Este programa lee tres números e imprime el mayor de los tres. Para lograr esto se

utilizan dos if anidados (uno dentro del otro). El primer if (línea 26) verifica si valor1 es

el mayor de los tres, de ser así lo guarda en mayor, de ser falso entonces se ejecuta el

bloque correspondiente al else de la línea 30. El bloque del else de la línea 30 es otra

estructura if...else... En este condicional no es necesario realizar una comparación

utilizando valor1 ya que si se llegó hasta este punto en el programa es porque valor1 no

es el mayor. En este condicional (línea 32) se comparan valor2 y valor3, si valor2 es el

mayor entonces se imprime el mismo, de lo contrario se imprime valor3.

Page 13: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

10.3 Estructura while para Repeticiones

condicion

bloque de

instrucciones

Ejemplo

:

a < 100

a=a+1

a = 5

print

a*a

//formato del while

//en Java

while (condición)

{

bloque de

instrucciones

}

a = 5;

while (a < 100)

{

System.out.println(a*a);

a = a + 1;

}

Page 14: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Ejemplo 01 de la Estructura While

start

contador = 0

suma = 0

contador < 10

print

“Entre un valor: “

input

valor

suma=suma+valor

contador=contador

+1

print

“La suma es”,suma

end

1 //while01.java

2 //Programa para calcular la suma de

3 //10 valores

4

5 import java.util.Scanner;

6

7 public class While01 {

8 public static void main( String args[])

9 {

10 int contador = 0,

11 suma = 0,

12 valor;

13

14 Scanner input = new Scanner(System.in);

15

16 while (contador < 10)

17 {

18 System.out.print("Entre un valor: ");

19 valor = input.nextInt();

20 suma = suma + valor;

21 contador++;

22 }//termina el while

23

24 System.out.println("La suma es: " + suma);

Page 15: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

25 }

26 }

Explicación

Este programa presenta la utilización de la estructura while. El programa se mantiene

leyendo valores mientras (while) no haya leído diez. Según se van leyendo los diez

valores los mismos se van sumando al acumulador suma que inicialmente contiene un

valor de 0. Luego de leer los diez valores y acumular la suma la misma se imprime. El

flujograma correspondiente al programa se presenta antes del mismo.

La línea 16 incluye el comienzo de la estructura while en donde se coteja si la condición

contador < 10 es cierta o falsa. Si la condición es cierta se ejecuta el bloque de

instrucciones que se encuentra bajo el while. Este bloque de instrucciones se encierra

entre corchetes para que el compilador pueda determinar dónde comienza y donde

termina. Si el bloque de instrucciones consta de una sola instrucción no es necesario

utilizar los corchetes. Sin embargo, en este curso siempre utilizaremos los corchetes para

mantener la consistencia. Recuerde que el código contenido entre corchetes debe estar

indentado para facilitar el manejo del programa. Incluso si el bloque consta de una sola

instrucción la misma debe estar indentada con respecto al while. El bloque de

instrucciones que será ejecutado mientras la condición del while es cierta se encuentra de

las líneas 18 a la 21. Note que el bloque está indentado con respecto a los corchetes en

las líneas 17 y 22. Note además que ambos corchetes están alineados con el while. Esta

forma de alinear los corchetes e indentar el bloque de instrucciones se utiliza también en

las estructuras if, if...else, for y do...while.

La línea 19 se utiliza para leer el valor entrado por el usuario. Sólo una línea es necesaria

ya que la misma se ejecuta diez veces (las veces que se ejecuta el ciclo) y por lo tanto

será suficiente para leer los diez valores. La línea 20 acumula el valor en la variable

suma. La línea 21 incrementa el valor de contador por uno (1). Esta línea es importante

ya que es la que logra que eventualmente la condición del while sea falsa. El bloque de

todo while debe incluir una o más instrucciones que persiga que eventualmente la

condición sea falsa ya que de lo contrario la estructura quedaría atrapada en un ciclo

infinito. Mientras la condición es cierta el bloque de instrucciones se ejecuta en orden.

Cada vez que se llega a la última línea del bloque se regresa arriba a examinar la

condición del while si la condición es cierta se ejecuta el bloque nuevamente, de ser falsa

se pasa a ejecutar la primera instrucción que se encuentra luego del bloque. La línea 24

se encarga de imprimir el valor de la suma. A continuación se presenta un ejemplo de la

corrida.

Page 16: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa while02.java

1 //while02.java

2 //Programa para calcular el promedio de

3 //n valores positivos utilizando un indicador

4

5 import java.util.Scanner;

6

7 public class While02 {

8 public static void main( String args[])

9 {

10 int contador = 0;

11 float suma = 0,

12 valor = 0,

13 promedio;

14

15 Scanner input = new Scanner(System.in);

16

17 //La lectura de los valores se detiene

18 //cuando se entra un valor negativo

19

20 while (valor >= 0)

21 {

22 System.out.print("Entre un valor: ");

23 valor = input.nextFloat();

24 suma = suma + valor;

25 contador++;

26 }//termina el while

27

¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ¼¼§ÏEntre un valor: 10 ÏϧÏLa suma es: 75

Page 17: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

28 //La siguiente instrucción evita que el

29 //valor negativo se mantenga dentro de

30 //la suma ya que no nos interesa

31

32 suma = suma - valor;

33

34 //La siguiente suma resta 1 al contador

35 //para no tomar en consideración el

36 //incremento que se hace cuando se

37 //lee el valor negativo

38

39 contador--;

40

41 promedio = suma / contador;

42

43 System.out.println("El promedio es: " + promedio);

44 }

Explicación

Este programa calcula el promedio de n valores positivos utilizando el siguiente

procedimiento: leer valores e ir acumulando la suma hasta que se lea un valor negativo,

en ese momento se divide la suma entre los valores leídos y se imprime el resultado. El

procedimiento para calcular la suma es parecido al utilizado en el programa while01, la

diferencia estriba en que en primer programa se sabía de antemano cuántos valores se

leerían y en este caso no.

La línea 10 inicializa a cero el valor de la variable valor. Esto es necesario para garantizar

que la condición de while sea cierta la primera vez que se ejecuta, de hecho, cualquier

valor mayor o igual a cero cumple con este propósito. Es una mala técnica de

programación el utilizar en un condicional o cómputo una variable que no ha sido

inicializada previamente de forma explícita.

La estructura while se mantiene ejecutando mientras que el valor leído no sea negativo, el

bloque de instrucciones acumula la suma de los valores (línea 24) e incrementa por uno la

variable contador cada vez que se lee un valor.

El promedio se puede calcular como la suma de los valores dividido entre el total de

valores (línea 41) sin embargo, la forma en que está codificado este ciclo while provoca

que el último número leído (el valor negativo) sea sumado junto con los demás valores y

que además sea contado. Para solucionar este problema en la línea 32 se le resta a suma

el último valor leído (que corresponde al valor negativo) y en la línea 39 se le resta 1 a la

variable contador.

Page 18: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Este programa presenta una deficiencia, ¿qué ocurriría si el primer número entrado fuera

negativo? ¿Cuál sería el valor del promedio? Se deja al estudiante el modificar el

programa para que contemple y maneje adecuadamente una situación como ésta.

A continuación se presenta un ejemplo de la corrida del programa.

10.4 Estructura for para Repeticiones

La estructura for se utiliza generalmente para ejecutar un bloque de instrucciones un

número específico de veces. O sea, si por ejemplo usted necesita que un bloque de

instrucciones se ejecute n veces en lugar de utilizar una estructura while es preferible

utilizar una estructura for. Todas las estructuras iterativas (con múltiples repeticiones) se

pueden implementar con un while pero en los casos en que se puede determinar la

cantidad de iteraciones de antemano es más sencillo utilizar una estructura for. Además,

la lógica de la estructura for es más fácil de entender que la estructura while.

El formato de la estructura for es el siguiente:

for (contador = valor_inicial; condicion; accion)

{

instrucciones

}

La variable contador se puede usar como un índice que va contando el número de

iteraciones. valor_inicial es el valor que se le asignará al índice al comienzo de la

primera iteración. condición es una expresión lógica que tiene que ser cierta para que los

ciclos de esta estructura iterativa se continúen repitiendo. Aunque el lenguaje acepta

cualquier expresión lógica en general se escribe una condición que verifica que el valor

del índice no ha excedido una cantidad determinada. Por ejemplo, que el del índice sea

menor que un valor n. accion es una instrucción que se ejecutará al final de cada ciclo

(iteración). En general esta instrucción se utiliza para incrementar o decrementar el valor

del índice pero puede ser otro tipo de instrucción también.

¼¼§ÏEntre un valor: 3 ¼¼§ÏEntre un valor: 4 ¼¼§ÏEntre un valor: 5 ¼¼§ÏEntre un valor: -1 ÏϧÏEl promedio es: 4.0

Page 19: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Ejemplo 10.4.1

El siguiente ejemplo muestra un programa que imprime los valores del 1 al 10. Primero

se muestra el flujograma y luego el programa de forma que se pueda apreciar la relación

entre ambos.

Ejemplo 10.4.2

El siguiente ejemplo muestra un programa que lee 5 valores, determina el promedio e

imprime el mismo.

public class ForEx {

public static void

main(String args[])

{

int i;

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

{

System.out.println(i);

}

}

}

Page 20: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa For01.java

1 //For01.java

2 //Programa para calcular el promedio de 5 valores

3 //utilizando la estructura for

4

5 import java.util.Scanner;

6

7 public class For01 {

8 public static void main( String args[])

9 {

10

11 Scanner input = new Scanner(System.in);

12

13 int contador;

14 float suma = 0,

15 valor,

16 promedio;

17

18 for (contador = 1; contador <= 5; contador++)

19 {

20 System.out.print("Entre un valor: ");

21 valor = input.nextFloat();

22 suma = suma + valor;

23 }//termina el for

24

25 promedio = suma / 5;

26

27 System.out.println("Promedio = " + promedio);

28 }

29 }

Explicación

Este programa presenta la utilización de la estructura for. La estructura for facilita la

implementación de un ciclo cuando se conoce de antemano cuántas veces será ejecutado.

En este ejemplo se desea ejecutar un ciclo 5 veces para leer 5 valores distintos (uno en

cada fase del ciclo). Los valores serán sumados en una variable (suma) y al final este

total será dividido entre 5 para determinar el promedio.

La línea 18 presenta el comienzo de la estructura for. El ciclo inicializa la variable

contador con un valor de 1, y el ciclo se continuará ejecutando mientras contador tenga

un valor menor o igual a 5 (contador <= 5). Cada vez que se complete la ejecución del

bloque de instrucciones la variable contador se incrementará por 1 (contador++)*.

Como se puede apreciar, si el contador comienza en 1, se incrementa en 1 al final de la

Page 21: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

ejecución del bloque y el ciclo se continuará ejecutando mientras contador sea menor o

igual a 5, entonces el ciclo se ejecutará exactamente 5 veces.

Al igual que en otras estructuras el bloque de instrucciones que pertenece a la estructura

for se encuentra encerrado entre corchetes. Si el bloque consta de sólo una instrucción,

no es necesario utilizar corchetes, sin embargo, utilizaremos siempre los corchetes para

mantener consistencia a través de todos nuestros programas. Recuerde que el código

dentro de los corchetes debe estar indentado con respecto a los corchetes y que los

corchetes que abren y cierran el bloque deben estar alineados con el for.

* contador++ provoca que el mismo resultado que contador = contador + 1. Esta forma

de incrementar el valor de una variable resulta en un código de ejecución más eficiente.

Por otro lado, la expresión podría resultar confusa para las personas que no conocen Java

o C++

Ejemplo de la ejecución del programa.

Ejemplo 10.4.3

El siguiente ejemplo muestra un programa que puede calcular el promedio de cualquier

cantidad de valores. El programa primero pide como dato cuántos valores se van a entrar

para calcular el promedio y luego procede con la lectura de los valores. Note que en este

caso el total de valores no se conoce antes de comenzar la ejecución del programa pero el

programa va a tener el valor antes de llegar a la sección de la lectura de los valores que se

usarán para el cómputo. Por lo tanto en este caso también se puede utilizar una estructura

for.

¼¼§ÏEntre un valor: 3 ¼¼§ÏEntre un valor: 23.4 ¼¼§ÏEntre un valor: 54.3 ¼¼§ÏEntre un valor: -30 ¼¼§ÏEntre un valor: 9 ÏϧÏPromedio = 11.94

Page 22: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa For02.java

1 //For02.java

2 //Programa para calcular el promedio de n valores

3 //utilizando la estructura for

4

5 import java.util.Scanner;

6

7 public class For02 {

8 public static void main( String args[])

9 {

10

11 Scanner input = new Scanner(System.in);

12

13 int n;

15 float suma = 0,

16 valor,

17 promedio;

18

19 System.out.print("Número de valores: ");

20 n = input.nextInt();

21

22 for (int i = 1; i <= n; i++)

23 {

24 System.out.print("Entre un valor: ");

25 valor = input.nextFloat();

26 suma = suma + valor;

27 }//termina el for

28

29 //En la próxima línea como n es de tipo int

30 //y se quiere hacer un cómputo con lugares

31 //decimales se hace un type cast para tratar

32 //a n como si fuera un valor float

33

34 promedio = suma / (float) n;

35

36 System.out.println("Promedio = " + promedio);

37 }

38 }

Explicación

Este programa presenta la utilización de una estructura for para calcular el promedio de n

valores. En este programa, a diferencia del programa For01, la cantidad de veces que se

ejecutará que el bloque de instrucciones dentro del ciclo, no se conoce hasta el momento

de ejecución del programa.

Page 23: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

La línea 19 del programa le indica al usuario que debe entrar el valor que indica cuántos

valores se van a sumar para calcular el promedio. En la línea 20 lee el valor del teclado y

lo almacena en la variable n. La línea 22 es la que indica cuántas veces se habrá de

ejecutar el bloque de instrucciones. En este caso el bloque de instrucciones se ejecutará n

veces, desde que i = 1 hasta que i = n. En la línea 22 también se introduce un concepto

nuevo, la declaración de una variable dentro de la misma estructura. En lugar de declarar

la variable i antes de la estructura for, ésta se puede declarar dentro la misma. Es

importante recordar que si una variable se declara dentro de una estructura entonces sólo

estará disponible dentro de esa estructura. Si tratamos de utilizarla en otro lugar del

programa recibiremos un mensaje de que la misma no está disponible.

Ejemplo de la corrida del programa

Ejemplo 10.4.4

El siguiente ejemplo muestra un programa que lee las puntuaciones de n exámenes de

100 puntos y determina el promedio y la nota correspondiente al mismo

Programa For03.java

1 //For03.java

2 //Programa para calcular el promedio de n exámenes

3 //de 100 puntos y determinar la nota

4 //correspondiente.

5

6 import java.util.Scanner;

7

8 public class For03 {

9 public static void main( String args[])

10 {

11

12 Scanner input = new Scanner(System.in);

13

14 int n;

15 float suma = 0,

16 valor,

¼¼§ÏNúmero de valores: 3 ¼¼§ÏEntre un valor: 1 ¼¼§ÏEntre un valor: 2 ¼¼§ÏEntre un valor: 4 ÏϧÏPromedio = 2.3333333

Page 24: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

17 promedio;

18

19 System.out.print("Total de exámenes: ");

20 n = input.nextInt();

21

22 for (int i = 1; i <= n; i++)

23 {

24 System.out.print("Entre puntuación del examen: ");

25 valor = input.nextFloat();

26 suma = suma + valor;

27 }//termina el for

28

29 promedio = suma / (float) n;

30 System.out.println("Promedio = " + promedio);

31

32 if (promedio >= 90)

33 {

34 System.out.println("Nota = A");

35 }

36 else

37 {

38 if (promedio >= 80)

39 {

40 System.out.println("Nota = B");

41 }

42 else

43 {

44 if (promedio >= 70)

45 {

46 System.out.println("Nota = C");

47 }

48 else

49 {

50 if (promedio >= 60)

51 {

52 System.out.println("Nota = D");

53 }

54 else

55 {

56 System.out.println("Nota = F");

57 }

58 }

59 }

60 }

61 }

62 }

Page 25: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Explicación

Este programa es una extensión del programa For02. En este caso se leerán n valores

para calcular el promedio de los mismos. Sin embargo, en este caso se le da una

interpretación específica a estos valores, los mismos representan los resultados de n

exámenes (asumiendo que los mismos tienen un valor máximo de 100). La extensión

principal al programa viene luego de calculado el promedio. El promedio de los

exámenes es utilizado para determinar la nota del estudiante utilizando la siguiente curva:

100 – 90 A

<90 – 80 B

<80 – 70 C

<70 – 60 D

<60 F

Para determinar la nota del estudiante se utiliza un grupo de if anidados. El primer if se

encuentra en la línea 32. Si el promedio se mayor o igual que 90 entonces se ejecuta la

línea 34 y se imprime la nota ‘A’. Si la condición en la línea 32 resulta falsa entonces se

pasa a ejecutar el bloque de instrucciones perteneciente al else que se encuentra en la

línea 36. Este bloque está compuesto por todas las instrucciones que van desde la línea

37 a la 60. Si la ejecución del programa llega a este bloque es indicativo de que el

promedio no es mayor o igual a 90, por lo tanto lo primero que se hace es verificar si el

promedio es el correspondiente a una calificación de ‘B’. La línea 38 coteja esta

condición, si el promedio es mayor o igual a 80 entonces se imprime la nota ‘B’ (línea

40), de lo contrario se ejecuta el bloque de instrucciones correspondiente al else de la

línea 42. De forma similar se verifica si el promedio es el correspondiente a una nota de

‘C’ o ‘D’. La línea 50 verifica si el promedio es correspondiente a una ‘D’, si esta

condición es falsa entonces la única opción restante es ‘F’ y esta nota se imprime en la

línea 56.

Un ejemplo de la corrida se presenta a continuación

Ejemplo 10.4.5

El siguiente ejemplo muestra una manera alterna para organizar las estructuras if

anidadas.

¼¼§ÏTotal de exámenes: 3 ¼¼§ÏEntre puntuación del examen: 87 ¼¼§ÏEntre puntuación del examen: 92 ¼¼§ÏEntre puntuación del examen: 81 ÏϧÏPromedio = 86.666664 ÏϧÏNota = B

Page 26: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa For04.java

1 //For04.java

2 //Ejemplo del uso del if ... else if ...

3

4 import java.util.Scanner;

5

6 public class For04 {

7 public static void main( String args[])

8 {

9

10 Scanner input = new Scanner(System.in);

11

12 int n;

13 float suma = 0,

14 valor,

15 promedio;

16

17 System.out.print("Total de exámenes: ");

18 n = input.nextInt();

19

20 for (int i = 1; i <= n; i++)

21 {

22 System.out.print("Entre puntuación del examen: ");

23 valor = input.nextFloat();

24 suma = suma + valor;

25 }//termina el for

26

27 promedio = suma / (float) n;

28 System.out.println("Promedio = " + promedio);

29

30 if (promedio >= 90)

31 {

32 System.out.println("Nota = A");

33 }

34 else if (promedio >= 80)

35 {

36 System.out.println("Nota = B");

37 }

38 else if (promedio >= 70)

39 {

40 System.out.println("Nota = C");

41 }

42 else if (promedio >= 60)

43 {

44 System.out.println("Nota = D");

Page 27: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

45 }

46 else

47 {

48 System.out.println("Nota = F");

49 }

50 }

51 }

Explicación

El propósito de este programa es presentar una forma alterna de escribir los if anidados

como los que se presentaron en el programa For03. La lógica de este programa es

idéntica a la lógica del programa For03, sin embargo, noten que los if no están escritos de

la misma forma. A continuación explicamos cómo se logra realizar esta modificación.

El siguiente ejemplo presenta una sección de programa con if anidados.

1. if (condicion1)

2. {

3. bloque1

4. }

5. else

6. {

7. if (condicion2)

8. {

9. bloque2

10. }

11. else

12. {

13. bloque3

14. }

15. }

Para efectos de la construcción de un programa, una estructura (if, if...else, while,

do...while o for) completa se considera como una unidad, esto es, se puede ver como si

fuese una sola instrucción. Por lo tanto si el bloque dentro una estructura es otra

estructura, no es necesario encerrarlo entre corchetes siempre y cuando no esté

acompañado de instrucciones adicionales. De esta forma el bloque de instrucciones

correspondiente al else de la línea 5 no necesita los corchetes que se encuentran en las

líneas 6 y 15. El código quedaría como se presenta a continuación:

Page 28: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

1. if (condicion1)

2. {

3. bloque1

4. }

5. else

7. if (condicion2)

8. {

9. bloque2

10. }

11. else

12. {

13. bloque3

14. }

Esta forma de escribir el código no altera de forma alguna la lógica del programa. Java

permite que más de una línea de código se escriba en la misma línea, por lo tanto el

código de la línea 7. se puede escribir al lado del código en la línea 5 y entonces el código

quedaría como se presenta a continuación:

1. if (condicion1)

2. {

3. bloque1

4. }

5. else if (condicion2)

8. {

9. bloque2

10. }

11. else

12. {

13. bloque3

14. }

Como el bloque 2 y el bloque 3 corresponden a la partes cierta y falsa del if en la línea 5,

podemos moverlas para la izquierda, entonces el código quedaría así:

1. if (condicion1)

2. {

3. bloque1

4. }

5. else if (condicion2)

8. {

9. bloque2

10. }

11. else

12. {

13. bloque3

14. }

Page 29: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

caso 1

bloque de

instrucciones

con break al final

caso 2

bloque de

instrucciones

con break al final

Si se incluye

default se

ejecuta este bloque

Vemos entonces que cuando el contenido de un else es una estructura if entonces

podemos unir el else y el if en la misma línea escribiendo un else if (condicion). Esta

forma de escribir el código resulta más adecuada en ocasiones como esta en la que todas

las condiciones se refieren a valores distintos de la misma variable o expresión.

10.5 Estructura switch para Selecciones Múltiples (utilizando el comando break)

Las estructuras switch se utilizan para implementar un grupo de condicionales

consecutivos en donde todas las condiciones evalúan una misma expresión y se toma la

decisión de qué bloque de instrucciones ejecutar en base al valor de la expresión. Las

expresiones pueden producir valores de tipo byte, short, int o char. Ningún otro tipo de

valor es permitido. Cuando se coloca la instrucción break al final de un bloque de

instrucciones la ejecución de la misma hace que la ejecución del programa continúe luego

del final de la estructura. En el caso de la estructura switch el efecto de ejecutar el break

es que no se ejecute ninguno de los bloques que pertenecen a los demás casos. Si no se

escribe el break entonces la ejecución del programa continúa con el próximo bloque que

se encuentre debajo.

switch (expresion)

{

case 1:

{

bloque de instruc-

ciones que se

ejecutará si

expresion = 1

}

case 2:

{

bloque de instruc-

ciones que se

ejecutará si

expresion = 2

}

default:

{

bloque de instruc-

ciones que se ejecu-

tará si ninguna de

las anteriores es

cierta

}

}

Page 30: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

10.6 Estructura switch para Selecciones Múltiples (sin utilizar el comando break)

La siguiente figura muestra la secuencia en que se ejecutarían los bloques de

instrucciones si no se utiliza la instrucción.

caso 1

bloque de

instrucciones

sin break al final

caso 2

bloque de

instrucciones

sin break al final

Si se incluye

default se

ejecuta este bloque

caso 3

bloque de

instrucciones

sin break al final

Page 31: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa switch01.cpp

1 //Switch01.java

2 //Programa para determinar el mayor, la suma

3 //y el promedio de dos valores utilizando un

4 //menú. El programa muestra el uso de la

5 //estructura switch.

6

7 import java.util.Scanner;

8

9 public class Switch01 {

10 public static void main( String args[])

11 {

12

13 Scanner input = new Scanner(System.in);

14

15 int opcion = 0;

16 float valor1,

17 valor2,

18 suma,

19 promedio;

20

21 System.out.print("Entre dos valores" +

22 " separados por un espacio: ");

23 valor1 = input.nextFloat();

24 valor2 = input.nextFloat();

25 while (opcion != 9) //la opción 9 termina el while

26 {

27 System.out.println("\n1. mayor");

28 System.out.println("2. suma");

29 System.out.println("3. promedio");

30 System.out.println("9. salir\n");

31

32 System.out.print("Seleccione opción: ");

33

34 opcion = input.nextInt();

35

36 switch (opcion)

37 {

38 case 1:

39 {

40 if (valor1 > valor2)

41 {

42 System.out.println("mayor: " + valor1);

43 }

44 else

Page 32: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

45 {

46 System.out.println("mayor: " + valor2);

47 }

48 break;

49 }

50 case 2:

51 {

52 suma = valor1 + valor2;

53 System.out.println("suma: " + suma);

54 break;

55 }

56 case 3:

57 {

58 promedio = (valor1 + valor2) / (float) 2.0;

59 System.out.println("promedio: " + promedio);

60 break;

61 }

62 case 9:

63 {

64 //no se hace nada

65 break;

66 }

67 default:

68 {

69 System.out.println("Opción incorrecta");

70 }

71 }

72 }

73 }

74 }

Explicación

En muchas ocasiones, el código de un programa requiere una serie de if anidados en

donde todas las condiciones son diferentes valores de una misma variable o expresión,

similar a como vimos en el programa For04. Si los valores de esta variable son enteros o

caracteres, entonces la estructura puede ser implementada con una estructura switch. La

forma en que se escribe esta estructura, aunque implementa la misma lógica de los if

anidados resulta más fácil de asociar (generalmente) con la lógica para resolver el

problema que los if anidados.

Este programa le pide al usuario que entre tres valores y le presenta la opción de imprimir

el mayor de los dos, la suma o el promedio. Una vez que el usuario entra la opción

deseada, el programa imprime el resultado correspondiente y nuevamente presenta las

opciones, si el usuario desea terminar la ejecución del programa selecciona la alternativa

Page 33: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

9. En caso de que el usuario seleccione una alternativa incorrecta, entonces el programa

le imprimirá el mensaje correspondiente.

Como se desea que el programa se mantenga imprimiendo las opciones (menú) y leyendo

las opciones hasta que el usuario desee dar por terminada la ejecución del programa, el

grueso del programa está contenido en un while que cubre las líneas de la 25 a la 72.

Para garantizar la ejecución del while la primera vez que se llega a él, es necesario

garantizar que la condición (opcion != 9) sea cierta. Para lograr esto se inicializa el valor

de opcion a un valor distinto a 9. En la línea 15 se inicializa el valor de opción con un 0.

El valor con que se inicialice la variable sólo tiene como condición el no ser 9.

El comienzo del bloque del while comienza con las líneas que imprimen las opciones

(líneas 27 a la 30). La línea 32 lee la opción seleccionada por el usuario y la guarda en la

variable opcion.

La estructura switch contiene las opciones de selección para el usuario e indica el

procedimiento que será seguido según la opción seleccionada. Al final del procedimiento

correspondiente a cada opción se incluye el comando break, este comando evita que el

programa continúe su ejecución en la siguiente línea del switch y lo obliga a salir de la

estructura. Esto no es siempre necesario y en algunos casos, dependiendo la lógica que

se desea implementar, el break no es utilizado en una o más de las opciones.

En caso de que el usuario entre la opción 9 la estructura switch hace “absolutamente

nada”, es por esto que sólo incluye un comentario indicando la situación.

En caso de que el usuario entre una opción incorrecta el switch lo manejará con la opción

default e imprime el mensaje “opción incorrecta”.

A continuación se muestra un ejemplo de la corrida del programa

¼¼§ÏEntre dos valores separados por un espacio: 10 15 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 1 ÏϧÏmayor: 15.0 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir

Page 34: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

ÏÏ§Ï ¼¼§ÏSeleccione opción: 2 ÏϧÏsuma: 25.0 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 3 ÏϧÏpromedio: 12.5 ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 4 ÏϧÏOpción incorrecta ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 5 ÏϧÏOpción incorrecta ÏÏ§Ï ÏϧÏ1. mayor ÏϧÏ2. suma ÏϧÏ3. promedio ÏϧÏ9. salir ÏÏ§Ï ¼¼§ÏSeleccione opción: 9 ÏϧÏ

Page 35: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

Programa de ejemplo utilizando valores tipo char para hacer las selecciones

La estructura switch permite utilizar valores de tipo char para realizar las selecciones.

Sin embargo, si se va a construir un programa para que el usuario entre por el teclado los

valores que se utilizarán para realizar las selecciones la situación es más compleja que si

se utilizan valores enteros.

Utilizando objetos de la clase Scanner podemos utilizar el método nextInt() para leer un

valor entero y podemos utilizar directamente ese valor en la estructura switch para que se

seleccione cuál es la selección correspondiente. Sin embargo, la clase Scanner no nos

provee un método para leer un solo carácter. Para leer un solo carácter podemos utilizar

otros mecanismos que provee Java, sin embargo, eso nos causa la siguiente situación:

Cuando un usuario entra un carácter por el teclado, además del carácter que se desea

entrar se entran otros caracteres especiales, como el que indica el final de la línea. Ese

carácter no es visible al usuario pero está incluido en la entrada. Luego de que el

programa lee el primer carácter, el próximo que se procesará es el próximo en la línea,

aunque no corresponda al carácter que explícitamente quiere entrar el usuario. Esta

situación requiere que se busquen métodos para descartar los caracteres no deseados.

En el ejemplo que mostramos próximamente se presenta una alternativa para utilizar el

carácter entrado explícitamente por el usuario y descartar los demás que componen la

línea. Para hacer esto se utilizará el método charAt(). Este método permite extraer de un

string el carácter que se encuentra en la posición indicada por el argumento entre

paréntesis. Por ejemplo, la instrucción

elCaracter = elString.charAt(3);

extrae del string elString el caracter que se encuentra en la posición 3 y almacena el

mismo en la variable elCarater. Es importante señalar que las posiciones comienzan en

la posición 0, o sea que el primer carácter del string se encuentra en la posición 0 (no en

la 1).

//Programa para mostrar el uso de la estructura switch

//cuando los valores utilizados para realizar las

//selecciones son de tipo char

import java.util.Scanner;

class switchStructUsingChars

{

public static void main(String args[])

{

Scanner input = new Scanner( System.in );

char alternativaChar; //variable que contendrá el

Page 36: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

//caracter seleccionado

//por el usuario

String linea = "";

do

{

System.out.println(" M E N U");

System.out.println("a. Saludo");

System.out.println("b. Despedida");

System.out.println("c. Comentario");

System.out.println("x. Salir del programa");

//Se lee la línea completa en donde el usuario

//entró la alternativa ya que Scanner no provee

//para leer un sólo caracter.

linea = input.next();

//El método charAt() en la próxima instrucción

//permite extraer de un string el caracter que

//se encuentra en la posición indicada por el

//argumento.

//En este caso se utiliza para extraer el que

//se encuentra en la posición 0 del string

//que es donde se encuentra el caracter entrado

//por el usuario. Las otras posiciones contienen

//otros caracteres como el que indica el final

//de la línea.

alternativaChar = linea.charAt(0);

switch (alternativaChar)

{

case 'a':

System.out.println("Hola, que gusto verte.");

break;

case 'b':

System.out.println("Nos vemos luego.");

break;

case 'c':

System.out.println("Qué bonito está el día!");

break;

default:

System.out.print("La alternativa seleccionada");

System.out.println(" no es válida. Favor

seleccionar");

System.out.println("otra alternativa.");

Page 37: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

break;

}

}

while (alternativaChar != 'x');

}

}

Ejemplo de la ejecución del programa

ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïa ÏϧÏHola, que gusto verte. ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïb ÏϧÏNos vemos luego. ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïc ÏϧÏQué bonito está el día! ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïd ÏϧÏLa alternativa seleccionada no es válida. Favor seleccionar ÏϧÏotra alternativa. ÏÏ§Ï M E N U ÏϧÏa. Saludo ÏϧÏb. Despedida ÏϧÏc. Comentario ÏϧÏx. Salir del programa ¼¼§Ïx ÏϧÏLa alternativa seleccionada no es válida. Favor seleccionar ÏϧÏotra alternativa.

Page 38: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

10.7 Problemas de Práctica

1. Diseñe un programa que lea dos números e indique si la suma de ambos es mayor o si

el producto de ambos es mayor.

2. Diseñe un programa que imprima los números del 1000 al 0 en decrementos de 4.

3. Diseñe un programa que lea un número e indique si el mismo es igual a cero, es

positivo, o es negativo.

4. Codifique el siguiente flujograma

start

A=5

B=20

A>B

print

A*B

A=A+2

B=B-3

print

A,B

end

5. Codifique el siguiente flujograma

Page 39: Lección 10: Estructuras de Controlece.uprm.edu/~jnavarro/LecEstrControlBW.pdf · Lección 10: Estructuras de Control Autor: José Navarro Referencias: C. Horstmann, “Big Java Late

ICOM 4015 : Programación Avanzada Estructuras de Control

José Navarro 2012

start

end

print

“ro” print

“alfa”

print

“beta”

print

“delta”

input

A,B

B<9

A>B

A>5