5.26 Una critica de las instrucciones break y continue es que ninguna es estructurada. En realidad, estas instrucciones pueden reemplazarse en todo momento por instrucciones estructuradas, aunque hacerlo podría ser inadecuado. Describa, en general, cómo eliminaría las instrucciones break de un ciclo en un programa, para reemplazarlas con alguna de las instrucciones estructuradas equivalentes. [Sugerencia: la instrucción break se sale de un ciclo desde el cuerpo de éste. La otra forma de salir es que falle la prueba de continuación de ciclo. Considere utilizar en la prueba de continuación de ciclo una segunda prueba que indique una "salida anticipada debido a una condición de 'interrupción'". Use la técnica que desarrolló aquí para eliminar la instrucción break de la aplicación de la figura 5.12.
_____________________________________________________________________________________
SOLUCIÓN:
Una alternativa a break es usar una condición que sirva de centinela para poder salir del ciclo for cuando esto ocurra. En el siguiente código se muestra esto con el auxilio de una variable llamada precisamente centinela.
Cuando el programa se ejecuta se imprime
Salio del ciclo en cuenta = 6
Debido a que el incremento a la variable cuenta se realiza de todas maneras al final del ciclo, antes de verificar la condición centinela. Se puede cambiar el valor de cuenta restandole 1 fuera de for. Sin embargo este es un programa muy simple. En el caso en el que después de que se cumple la condición centinela hay instrucciones a realizar en el cuerpo de for deberán encerrarse en un if que verifique que la condición centinela se ha alcanzado.
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * Este programa usa una instruccion if para eliminar una * * instruccion break. * *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ public class Deitel_5_26 { // Abre Deitel_5_26 public static void main(String args[]) { // Abre main int cuenta; int centinela = 0; for ( cuenta = 1; cuenta <= 10 && 0 == centinela; cuenta++ ) { // Abre for if ( 5 == cuenta ) centinela = 1; } // Cierra for System.out.printf("\nSalio de ciclo en cuenta = %d\n", cuenta ); } // Cierra main } // Cierra Deitel_5_26
No hay comentarios:
Publicar un comentario