2011-06-14 13 views
6

¿Se puede escribir un bucle for en Java para crear un bucle infinito o solo son los bucles while los que causan ese problema?¿Se puede escribir un bucle for para crear un bucle infinito o solo son bucles while que hacen eso?

+0

Soy nuevo en la programación: mi libro de texto menciona ciclos infinitos solo en el contexto de un ciclo while. – Genki

+0

Un ciclo for es solo otra sintaxis para un ciclo while. Todo lo que es posible con uno de ellos también es posible con el otro. –

+0

Cualquier bucle for donde la condición de terminación nunca se puede cumplir será infinito: 'for ($ i = 0; $ i> -1; $ i ++) {...}' –

Respuesta

8

También puede hacerlo con bucles for. P.ej. el siguiente es idéntico al while(true):

for(;;) { 
} 
+1

+1 Más críptico. – asgs

+3

Use 'for (;;);' para un ciclo infinito más corto :-) –

14
for(;;){} 

es igual que

while(true){} 
+0

+1, lo que demuestra la transformación. – mre

+1

Esto es bastante quisquilloso (y de hecho puede ser incorrecto, de todos modos, lo obtuve de un niño dos grados encima de mí en la escuela secundaria), pero había oído que 'para (;;)' se compila en un no -condicional 'jmp' o lo que sea, mientras que para' while (true) 'primero verifica que' true' se evalúa como 'true'. – tsm

6

Claro que se puede

for(int i = 0; i == i; i++) {} 

Cualquier bucle pueden ser por infinita siempre y cuando se haga de manera nunca golpear las condiciones de salida.

4

No se olvide errores como

for (int i=0; i<30; i++) 
{ 
    //code 
    i--; 
} 

No es tan infrecuente como debe ser.

2

voy a añadir esto ya que nadie hizo esta versión:

for(;;); 
8

Aparte de las cuestiones de alcance y una otra cosa, esto:

for(<init>; <test>; <step>) { 
    <body> 
} 

es lo mismo que:

<init> 
while(<test>) { 
    <body> 
    <step> 
} 

Como han mencionado otras personas, de la misma manera que puede tener un bucle while sin un <init> forma o <step> forma, puede tener un bucle for sin ellos:

while(<test>) { 
    <body> 
} 

es lo mismo que

for(;<test>;) { 
    <body> 
} //Although this is terrible style 

Y, por último, usted podría tener un

for(;true;) { 
    <body> 
} 

Ahora, recuerde cuando dije que había otra cosa? Es que no lo hacen bucles for necesitan una prueba - dando la solución a todos los demás ha publicado:

for(;;) { 
    <body> 
} 
+1

Olvidó el bucle for-each: siempre puede escribir un iterador que repite siempre>: - D –

1

Por supuesto para los bucles pueden causar bucles infinitos. Un ejemplo es:

for(int i = 0; i < 99; i /= 2){ ... }

Debido i no se incrementa, permanecerá en el cuerpo del bucle for siempre hasta que salga del programa.

3

Sólo por diversión (y esto demasiado tiempo para un comentario): una gran cantidad de la gente va a ser muy sorprendido al saber que para muchos propósitos muy prácticos, la siguiente es casi un bucle infinito:

for (long i = Long.MIN_VALUE; i < Long.MAX_VALUE; i++) { 
     ... 
    } 

Si el hilo de la ejecución de este bucles pueden hacer 4 mil millones de ciclos por segundo y puede hacer el incremento y el cheque en un ciclo (bastante fornido para un solo hilo) y si mis matemáticas no son totalmente fuera, creo que el anterior el código necesita aproximadamente 150 años para ejecutarse:)

-1

se puede declarar una subparte del código para ser otra parte en un bucle for, ejemplo -

public class (classname) { 
    for(int i = 1; i <= 4; i++) { 
     for(int j = 1; i <= 4; j++) { 
    system.out.println(i + "*" + j + "=" (i*j)); 
} 

}

es casi en bucle infinito; si cambia int a long, y añadir más variables, prácticamente se puede hacer que dure 25 x 10^12 minutos de duración

+2

¡Perder más tiempo no lo convierte en un bucle infinito! – Swapnil

0

También es éste, para completar el tema:

do {something();} while(true); 
2

La forma en que hecho que mi servidor para ejecutar todo el tiempo hasta que apagarlo es

for(int i = 0;i<-1;i++){//code here}

0

Hay un montón de maneras de hacer que los bucles infinitos. Esta es la solución que encontré:

int j = 1; 
for (int i = 0; i < j; i++) { 
    //insert code here 
    j++; 
} 

Esto funciona muy bien para mí, ya que permite el bucle para comprobar una cantidad infinita de valores, así como un bucle infinito.

Cuestiones relacionadas