¿Cuál es la declaración de bucle infinito más corta en Java?


8

Estoy trabajando en un golf para Java y necesito un bucle infinito. Obviamente, no quiero gastar más bytes de los necesarios, especialmente en un lenguaje tan expresivo.

Suponiendo que tengo un código que quiero ejecutar, obviamente la línea de base se establece en while(1>0)/*stmt*/10 caracteres adicionales para una sola línea y while(1>0){/*stmt1*//*stmt2*/}12 caracteres adicionales para varias líneas. Digo adicional porque el código que quiero hacer un bucle para siempre (bueno, para siempre ... puede que quiera o no querer salir o regresar del bucle) tendrá una cierta longitud, y luego debo agregar caracteres adicionales para que sea realmente en bucle.

Al principio pensé que esto era lo mejor que podía obtener, pero pensé que se lo echaría a los expertos para ver si pueden encontrar uno mejor.


O algo asi main();?
jimmy23013

@ jimmy23013 No, pero puedes hacerlo main(null).
Ypnypn

@Ypnypn O main(a)si mainse declara como public static void main(String[]a).
Dennis

Fuera de interés, ¿los compiladores de Java o los JIT suelen optimizar la recursividad de las llamadas de cola, o estas recursiones están limitadas por el tamaño de la pila?
Steve Jessop

Respuestas:


14
for(;;){}

Funciona porque ninguna condición se evalúa como siempre verdadera. Inserte el código entre las llaves.

Si solo tiene unas pocas declaraciones, puede colocarlas dentro de la cabeza (la parte (;;). El hecho de que el ciclo aún se ejecute se debe a que cuando la declaración de condición no es booleana, se cuenta como siempre verdadero. Gracias a @Ypnypn por el recordatorio


66
Si tiene varias declaraciones, intente poner todas menos una en el bucle for. por ejemplo,for(;;foo(),bar(),baz())quux();
Ypnypn

2
puedes cambiar los frenos vacíos por un punto y comafor(;;);
fanático del trinquete el

@ratchetfreak Solo si no tienes la intención de romper el ciclo, pero el OP que ellos quieren puede romper.
Alex A.

@ratchetfreak Sí, estoy buscando tanto una sola línea como varias líneas, aunque es discutible si la sugerencia de Ypnypn podría ser más pequeña. De cualquier manera, debería editar mi publicación para que mi objetivo sea más claro.
corsiKa

@Ypnypn No creo que sea una sintaxis legal. No hay operador de coma en Java (aunque puede usarse en declaraciones de variables).
Tom Hawtin - tackline

1

Java - 60 bytes (código completo)

Probablemente no estoy interpretando la pregunta correctamente, pero este código cuando se compila y se ejecuta da como resultado un bucle infinito, en el sentido de que técnicamente debería ejecutarse para siempre, pero generalmente agotará la memoria de la pila.

public class X{public static void main(String[]a){main(a);}}

En Coding Ground termina bastante rápido, en mi computadora portátil con Windows 7 con administración avanzada de memoria virtual, se ejecuta mucho tiempo, lo que hace que el sistema sea cada vez más lento.


1
El problema con su solución es que le proporcionará StackOverflowError con bastante rapidez, por lo que es difícil llamarlo bucle infinito
usuario902383
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.