De programación java y bucle iteraciones

Video: 4. Introducción a la programación en java con NetBeans: Bucle iterativo FOR

Para hacer bucles de su programa de Java fácil de escribir y más fácil de entender, lo que necesita saber cómo Java descanso y continuar declaraciones afectan iteraciones del bucle.

Video: Estructura Iterativa bucle While (16-25) Curso de Java - Algoritmos y Programación

declaración de la rotura de Java

Echar un vistazo en el siguiente programa. El programa genera aleatoriamente un número de 1 a 10, y repetidamente pide al usuario que adivinar ese número.

listado 1

estática java.util.Scanner a importar clase java.util.Random-público-java.lang.System.out importar importar GuessAgain {void Main (args String []) {public static escáner teclado = nuevo escáner (System.in) - int numGuesses = 0-int randomNumber = new Random (). nextInt (10) + 1-out.println (" ************ ") -out.println ("Bienvenido al juego de adivinar") -out.println (" ************ ") -out.println () - out.print ("Introduzca un entero de 1 a 10: ") -INT númeroEntrada = keyboard.nextInt () - numGuesses ++ -mientras que (númeroEntrada! = randomNumber) {out.println () - out.println ("Inténtalo de nuevo...") -out.print ("Introduzca un entero de 1 a 10: ") -inputNumber = keyboard.nextInt () - numGuesses ++ -}out.print ("Se gana después ") -out.println (numGuesses + " conjeturas.") -keyboard.close () -}}

La siguiente figura muestra una ejecución del código. El usuario hace cinco conjeturas. Cada vez, el ordenador comprueba para ver si la suposición es correcta. Una suposición errónea genera una solicitud para volver a intentarlo. Para una suposición correcta, el usuario obtiene una calurosa Tú ganas, junto con un recuento del número de conjeturas que él o ella hizo. El equipo está repitiendo varias declaraciones una y otra vez, comprobando cada vez a través para ver si la conjetura de que el usuario es el mismo que el número generado aleatoriamente. Cada vez que el usuario hace una suposición, el equipo añade 1 a su cuenta de conjeturas. Cuando el usuario hace la suposición correcta, el ordenador muestra la correspondencia de.

Lo que es extraño acerca de este programa? Bueno, algunas declaraciones aparecen más de una vez en el programa. Normalmente, una declaración que ha copiado de una parte de un programa a otro no es motivo de preocupación. Sin embargo, la estrategia general parece sospechoso. El programa consigue un número desde el usuario antes de que el bucle y (de nuevo) en el interior del bucle.

out.print ("Introduzca un entero de 1 a 10: ") -int númeroEntrada = keyboard.nextInt () -numGuesses ++ -mientras que (númeroEntrada = randomNumber!) {out.println () - out.println ("Inténtalo de nuevo...") -out.print ("Introduzca un entero de 1 a 10: ") -númeroEntrada = keyboard.nextInt () -numGuesses ++ -}

Este código utiliza un truco estándar para hacer bucles de trabajo. Se llama cebado un bucle. El patrón es

Obtener el aportemientras que la entrada que tienes no es la última entrada{ Obtener más de entrada}

En el comienzo de la mientras bucle, el ordenador comprueba una condición que tiene que ver con la entrada del usuario. Por lo que el sistema no entra en el bucle hasta que el usuario da una cierta entrada. Luego, cuando el equipo está dentro del bucle, el ordenador solicita más de entrada para alimentar siguiente iteración del bucle. El truco parece extraño, pero funciona.

Los desarrolladores utilizan esta técnica, el cebado de un bucle, todo el tiempo, por lo que no puede ser tan malo. Pero hay otra manera.

listado 2

estática java.util.Scanner a importar clase java.util.Random-público-java.lang.System.out importar importar GuessAgain {void Main (args String []) {public static escáner teclado = nuevo escáner (System.in) - int númeroEntrada, numGuesses = 0-int randomNumber = new Random (). nextInt (10) + 1-out.println (" ************ ") -out.println ("Bienvenido al juego de adivinar") -out.println (" ************ ") -out.println () -while (true) {out.print ("Introduzca un entero de 1 a 10: ") -inputNumber = keyboard.nextInt () - numGuesses ++ -si (númeroEntrada == randomNumber) {descanso-}out.println () - out.println ("Inténtalo de nuevo...") -}out.print ("Se gana después ") -out.println (numGuesses + " conjeturas.") -keyboard.close () -}}

Desde el punto de vista del usuario, el código del listado 2 hace exactamente lo mismo que el código en el Listado 1. (Para ver la salida de cualquiera de los programas, consulte la figura anterior). La diferencia es el Listado 2 tiene sólo una llamada a keyboard.nextInt. Esa llamada es dentro del bucle, por lo que el equipo debe entrar en el bucle sin probar cualquier entrada.

Si nos fijamos en la condición del bucle, se puede ver cómo funciona esto. La condición del bucle es siempre verdad. No importa lo que está pasando, la condición del bucle siempre se pasa su prueba. Por lo tanto la condición del bucle es un gran fraude. Nunca saltar fuera del bucle al no la prueba en la condición del bucle. En su lugar, saltar cuando se pulsa el descanso declaración que hay dentro del bucle (y que se golpea descanso declaración cuando pasas la si (númeroEntrada == randomNumber) barricada). Todo esto funciona muy bien.

Cuando el equipo se ejecuta una descanso afirmación de que está en un bucle, el equipo salta fuera del circuito (a la primera instrucción que viene después del bucle).

Con un descanso comunicado, el equipo salta de un solo bucle. Si ese bucle pasa a ser dentro de otro bucle (un bucle exterior) el equipo no salta fuera del bucle externo.

BreakOutOfLoop public class {void main (String [] args) {public staticfor (int i = 0- i lt; 3- i ++) {for (int j = 0- j lt; 100- j ++) {System.out.print (j + " ") -Si (j gt; 9) {} Break-}System.out.println (" Estalló!") -}}}

Para ilustrar, la figura siguiente contiene la salida del código anterior:

Cuando el equipo llega a la descanso declaración, el control salta a la Rompí declaración. Ese Rompí declaración es fuera de del para j pero es de bucle dentro el para i lazo.

Desde el punto de vista de un programador, el código en el Listado 2 es más natural que el código en el Listado 1. Después de todo, ¿cómo proceder el juego? Las conjeturas de usuario, el ordenador comprueba la conjetura, y luego (si la suposición no es correcta) el ordenador dice “vuelve a intentarlo.” Esa es la secuencia de eventos como se describe en el Listado 2. Pero en el Listado 1, el código dentro del lazo parece describir los acontecimientos en el orden inverso: el lazo dice “Inténtalo de nuevo”, y luego el usuario introduce un número.

Listado 2 ofrece una buena alternativa a la técnica de bucle de cebado en el Listado 1. Entonces, ¿por qué se molestan los programadores para cebar sus bucles? Hacer descanso declaraciones tienen alguna desventaja ocultos? Bueno, la respuesta depende del punto de vista. Algunos piensan que los programadores descanso declaraciones en bucles son confusas. Todo el salto de la declaración a la declaración hace mareado y les recuerda algo de la década de 1960 llamado código espagueti. (usos código espagueti ir declaraciones de saltar de una declaración a otra. En Pascal por Ejemplo, B. autor Burd dice “Programación con Goto es como viajar por París nadando a través de su sistema de alcantarillado. Hay un montón de atajos, pero ninguno de ellos vale la pena tomar.”) De una forma u otra, descanso declaraciones en bucles son la excepción y no la regla. Utilizar si lo desea, pero no espere encontrar muchos de ellos en código Java de otras personas.

Video: 08 - Curso de Programación Java - Estructura Iterativa - [Bucle for]

sentencia continue de Java

Listado 3 ofrece más salsa secreta para los bucles de su programa. Imagine un juego que genera aleatoriamente tres números del 1 al 20. El usuario toma cinco vueltas adivinar los números. Cuando el usuario entra en una suposición correcta, el programa felicita al usuario. ( “Buen intento”, dice el programa.) Cuando el usuario introduce una suposición incorrecta, el programa no proporciona retroalimentación.

Listado 3 contiene algo de código para hacer que todo suceda.

listado 3

estática java.util.Scanner a importar clase java.util.Random-público-java.lang.System.out importar importar GuessAgainAndAgain {void Main (args String []) {public static escáner teclado = nuevo escáner (System.in) - int númeroEntrada-int randNum1 = new Random (). nextInt (20) + 1-int randNum2 = new Random (). nextInt (20) + 1-int randNum3 = new Random (). nextInt (20) + 1-out. println (" ************ ") -out.println ("Bienvenido al juego de adivinar") -out.println (" ************ ") -out.println () - for (int i = 0- i lt; 5- i ++) {out.print ("Introduzca un int: ") -inputNumber = keyboard.nextInt () -si (númeroEntrada! = randNum1 && númeroEntrada! = randNum2 &&númeroEntrada! = randNum3) { continuar- }out.println ("¡Buena suposición!") -out.println () - out.print} ("Los números son ") -out.print (randNum1 + " ") -out.print (randNum2 + " ") -out.print (randNum3 + " ") -keyboard.close () -}}

Esta figura muestra una ejecución de un programa de este tipo.

Java continuar declaración indica a la computadora para saltar más allá de las declaraciones que quedan dentro del bucle. Es decir, en lugar de ejecutar las sentencias restantes dentro del bucle, el ordenador pasa al comienzo de la siguiente iteración del bucle. Así, en el Listado 3, cuando el número de entrada No es cualquiera de los números generados al azar del programa, el equipo salta pasado el código “Buen intento”, incrementa el contador de bucle (la variable yo), Y le pregunta al usuario para otro valor de entrada. (Por supuesto, si el contador del bucle alcanza su límite, el equipo no ejecuta otra iteración. En su lugar, el equipo salta fuera del circuito, y ejecuta cualquier declaraciones vienen después del bucle.)

Puede volver a escribir fácilmente Listado 3 para que el código no tiene continuar declaración. Habría que poner el código “Buen intento” dentro de una Si declaración, pero que estaría bien. los continuar declaración no hace mucho para mejorar el aspecto del programa de venta 3. Pero cuando se quiere evitar el código de nido en el interior Si declaraciones, el continuar declaración viene muy bien.

Tal vez, en su aplicación, el resto del bucle es una complicada secuencia de declaraciones. Usted no quiere hacer esta secuencia parece más complicado encerrándolo dentro de una Si declaración. O tal vez, en su aplicación, sólo en raras ocasiones se salta el resto del bucle, y desea hacer hincapié en esta rareza al no encerrar el resto del bucle en una Si declaración. En cualquier caso, una continuar declaración podría ser exactamente la elección correcta.

Artículos Relacionados