132

Capítulo 4 Instrucciones de control: parte 1

Figura 4.9

 | Repetición controlada por centinela: problema del promedio de una clase. (Parte 3 de 3).

Comparación entre la lógica del programa para la repetición controlada por centinela, y la repetición 
controlada por contador

Compare la lógica de esta aplicación para la repetición controlada por centinela con la repetición controlada por 
contador en la fi gura 4.6. En la repetición controlada por contador, cada iteración de la instrucción 

while

 (líneas 

52 a 58 de la fi gura 4.6) lee un valor del usuario, para el número especifi cado de iteraciones. En la repetición 
controlada por centinela, el programa lee el primer valor (líneas 53 y 54 de la fi gura 4.9) antes de llegar al 

whi-

le

. Este valor determina si el fl ujo de control del programa debe entrar al cuerpo del 

while

. Si la condición del 

while

 es falsa, el usuario introdujo el valor centinela, por lo que el cuerpo del 

while

 no se ejecuta (es decir, no 

se introdujeron califi caciones). Si, por otro lado, la condición es verdadera, el cuerpo comienza a ejecutarse y el 
ciclo suma el valor de 

calificacion

 al 

total

 (línea 59). Después, las líneas 63 y 64 en el cuerpo del ciclo reciben 

el siguiente valor escrito por el usuario. A continuación, el control del programa se acerca a la llave derecha de 
terminación (

}

) del cuerpo del ciclo en la línea 65, por lo que la ejecución continúa con la evaluación de la con-

dición del 

while

 (línea 57). La condición utiliza el valor más reciente de 

calificacion

que acaba de introducir 

el usuario, para determinar si el cuerpo de la instrucción 

while

 debe ejecutarse otra vez. Observe que el valor 

de la variable 

calificacion

 siempre lo introduce el usuario inmediatamente antes de que el programa evalúe la 

condición del 

while

. Esto permite al programa determinar si el valor que acaba de introducir el usuario es el valor 

centinela,

antes de que el programa procese ese valor (es decir, que lo sume al 

total

). Si el valor introducido es el 

valor centinela, el ciclo termina y el programa no suma –1 al 

total

.

Buena práctica de programación 4.6

En un ciclo controlado por centinela, los indicadores que solicitan la introducción de datos deben recordar explícita-
mente al usuario el valor que representa al centinela.

 

Una vez que termina el ciclo se ejecuta la instrucción 

if...else

 en las líneas 69 a 80. La condición en la 

línea 69 determina si se introdujeron califi caciones o no. Si no se introdujo ninguna, se ejecuta la parte del 

else

(líneas 79 y 80) de la instrucción 

if...else

 y muestra el mensaje 

"No se introdujeron calificaciones"

, y 

el método devuelve el control al método que lo llamó.
 

Observe el bloque de la instrucción 

while

 en la fi gura 4.9 (líneas 58 a 65). Sin las llaves, el ciclo considera-

ría que su cuerpo sólo consiste en la primera instrucción, que suma la 

calificacion

al

total

.Las últimas tres 

instrucciones en el bloque quedarían fuera del cuerpo del ciclo, ocasionando que la computadora interpretara el 
código incorrectamente, como se muestra a continuación:

while

 ( calificacion != 

-1

 )

 

 

total = total + calificacion;

// suma calificación al total

 

contadorCalif = contadorCalif + 

1

;

// incrementa el contador

// obtiene como entrada la siguiente calificación del usuario

 System.out.print( 

"Escriba calificacion o –1 para terminar: "

 );

 

calificacion = entrada.nextInt();

El código anterior ocasionaría un ciclo infi nito en el programa, si el usuario no introduce el centinela 

–1

 como 

valor de entrada en la línea 54 (antes de la instrucción 

while

).

 78  

 

}

// fin de if

 79  

 

else

//no se introdujeron calificaciones, por lo que se imprime el mensaje 

apropiado

 

80    

System.out.println(

"No se introdujeron calificaciones"

 );

 81  

}

// fin del método determinarPromedioClase

 82
 83 

}

// fin de la clase LibroCalificaciones

04_MAQ_CAP_04.indd132

4/19/081:20:43AM