2011-08-16 28 views

Respuesta

70

Un for bucle en Java tiene la siguiente estructura -

for (initialization statement; condition check; update) 
    loop body; 

Como se puede ver, hay cuatro declaraciones aquí -

  1. declaración de inicialización: Esta declaración se ejecuta sólo una vez, cuando el loop se ingresa por primera vez. Esta es una declaración opcional, lo que significa que puede elegir mantener este campo en blanco. En general, se usa para algunos fines de inicialización.
  2. Cheque condicional: Esta afirmación es probablemente la más importante. Verifica para verificar si cierta expresión se evalúa como verdadera. Si es así, entonces la ejecución del ciclo continúa. Puede optar por mantener este campo vacío, que se evaluará en true.
  3. Actualización: Esta lista de instrucciones se ejecuta de izquierda a derecha, normalmente se usa para incrementar/disminuir alguna variable.
  4. cuerpo de bucle: El cuerpo del bucle, que se ejecutará una y otra vez en función del valor de verdad del control condicional.

Básicamente, así es como sigue la ejecución: primero, cuando se ingresa el ciclo por primera vez, la instrucción de inicialización se ejecuta una vez. Luego se ejecuta la verificación condicional para ver si se evaluó como verdadero. Si es así, entonces se ejecuta el cuerpo del bucle, de lo contrario, la ejecución del bucle finaliza. Después de eso, la (s) declaración (es) de actualización se (son) ejecutan. A continuación, la comprobación condicional se ejecuta de nuevo, y si se evalúa como verdadera, entonces nuevamente se ejecuta el cuerpo del bucle, luego se ejecuta la instrucción de actualización, luego otra vez la comprobación condicional ... se obtiene la imagen.

Ahora sobre su sintaxis for(; ;). No tiene instrucción de inicialización, por lo que no se ejecutará nada. Su declaración de verificación condicional también está vacía, lo que significa que se evalúa como verdadera. Después de eso, se ejecuta el cuerpo del bucle.A continuación, dado que la declaración de actualización está vacía, no se ejecuta nada. Luego se realiza de nuevo la verificación condicional, que nuevamente se evalúa como verdadera y luego todo este proceso volverá a repetirse.

Como ve, básicamente se trata de un bucle infinito que no tiene instrucción de inicialización, cuya comprobación condicional siempre se evaluará como verdadera y que no tiene ninguna declaración de actualización. Esto es equivalente a -

while(true) 
{ 
    ..... 
} 

que es otra construcción de bucle popular en java.

Cuando utiliza un bucle infinito como este, es importante prestar atención a la condición de ruptura ya que en la mayoría de los casos no puede dejar que un bucle se ejecute indefinidamente. Para salir de este tipo de bucles, puede usar la instrucción break. La estructura es la siguiente -

if(some_condition_is_true) 
    break;  // This will cause execution to break out of its nearest loop 

o

if(some_condition_is_false) 
    break; 
34

Esto es lo mismo que:

while(true) { 
    //Some Stuff 
} 

Básicamente, una sintaxis alternativa para un bucle infinito.

+0

Aunque nos enseñan a evitar Usando bucles infinitos, soy culpable de un tiempo (verdadero) en más de una ocasión. –

+2

Siento que tienen sus momentos en los que son útiles – user489041

+4

Al menos si usa mientras (verdadero) la persona que lee el código parece más probable que lo entienda ... – PeterT

6

Este bucle no tiene protección y actúa como un ciclo while (verdadero). Bucle infinito hasta un descanso.

+3

o una devolución! ... ~ –

+10

o un desbordamiento de la pila –

+0

No debería imaginar que esta pila se desborde ya que no hay una pila que vuelva al comienzo de un ciclo. – Wes

2

Es un ciclo infinito. Las instrucciones de inicialización, condición e incremento son todas opcionales, por lo que sin ninguna de ellas, siempre se repetirá (a menos que se golpee una interrupción o que otra construcción interactúe con ella).

Aunque estoy seguro acerca de Java this question, explica cómo en .Net su vacío for y una while (true) será compilado a exactamente la misma cosa. No me sorprendería que Java también lo haga.

3

Es un bucle infinito. No es exactamente una buena codificación porque no es intuitivo que compilaría o no arrojaría un error de tiempo de ejecución. Reescribir como while(true) { /* code */ } sería mucho más legible para indicar un ciclo infinito.

+0

Olvidó el corchete de cierre en su ejemplo de código; D –

+0

tiene razón en que mi código no recogió el corchete de cierre como estaba escrito debido al comentario en línea, pero solo quería tenerlo todo en una línea. –

8

Estos son todos los bucles infinitos

for(;;) { 
    // endlessly 
} 

while(true) { 
    // endlessly 
} 

do { 
    // endlessly 
} while(true); 
0

/* bucle while

5 dólares

1 de chocolate = 1 dólares

while my money is greater than 1 bucks 
    select chocolate 
    pay 1 bucks to the shopkeeper 
    money = money - 1 
end 

vienen a casa y no puede ir al mismo tiempo tienda porque mi dinero = 0 dólares */

#include<stdio.h> 
int main(){ 
    int money = 5; 

    while(money >= 1){ 
    printf("inside the shopk and selecting chocolate\n"); 
    printf("after selecting chocolate paying 1 bucks\n"); 
    money = money - 1 ; 
    printf("my remaining moeny = %d\n", money); 
    printf("\n\n"); 
    } 

    printf("dont have money cant go inside the shop, money = %d", money); 

    return 0; 
} 

dinero infinito

while(codition){ // condition will always true ....infinite loop 
    statement(s) 
} 

visite este video para una mejor comprensión https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s