Qual é a instrução de loop infinito mais curta em Java?


8

Estou trabalhando em um golfe para Java e preciso de um loop infinito. Obviamente, não quero gastar mais bytes do que preciso, especialmente em uma linguagem tão expressiva.

Supondo que eu tenha algum código que eu queira executar, obviamente a linha de base está definida em while(1>0)/*stmt*/10 caracteres adicionais para uma única linha e while(1>0){/*stmt1*//*stmt2*/}12 caracteres adicionais para várias linhas. Digo adicional porque o código que quero repetir para sempre (bem, para sempre ... talvez eu queira ou não sair ou retornar do loop) terá um certo comprimento e, em seguida, devo usar caracteres adicionais para torná-lo realmente loop.

No começo, achei que isso seria o melhor que conseguiria, mas achei que os jogaria para os especialistas para ver se eles poderiam encontrar um melhor.


Ou algo assim main();?
jimmy23013 02/09/2015

@ jimmy23013 Não, mas você pode fazer main(null).
Ypnypn 2/09/2015

@Ypnypn Ou main(a)se mainfor declarado como public static void main(String[]a).
Dennis

Fora de interesse, os compiladores ou JITs Java geralmente otimizam a recursão de chamada de cauda ou essas recursões são limitadas pelo tamanho da pilha?
Steve Jessop

Respostas:


14
for(;;){}

Funciona porque nenhuma condição é avaliada como sempre verdadeira. Insira o código entre os chavetas.

Se você tiver apenas algumas instruções, poderá colocá-las dentro da cabeça (a parte (;;). O loop que ainda é executado é causado por, quando a instrução de condição não é um booleano, conta como sempre verdadeiro. lembrete


6
Se você tiver várias instruções, tente colocar todas, exceto uma, no próprio loop for. por exemplo,for(;;foo(),bar(),baz())quux();
Ypnypn 02/09/2015

2
você pode trocar as chaves vazias por um ponto e vírgulafor(;;);
catraca aberração

@ratchetfreak Somente se você não pretende interromper o loop, mas o OP que eles querem que seja capaz de quebrar.
Alex A.

@ratchetfreak Sim, estou procurando tanto por uma linha quanto por várias linhas, embora seja discutível se a sugestão de Ypnypn pode realmente ser menor. De qualquer forma, devo editar minha postagem para deixar meu objetivo mais claro.
corsiKa

@Ypnypn Eu não acho que isso seja sintaxe legal. Não há operador de vírgula em Java (embora possa ser usado em declarações de variáveis).
Tom Hawtin - defina

1

Java - 60 bytes (código completo)

Provavelmente não estou interpretando a pergunta corretamente, mas esse código, quando compilado e executado, resulta em um loop infinito, pois tecnicamente ele deve ser executado para sempre, mas geralmente esgotará a memória da pilha.

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

No Coding Ground, ele termina rapidamente, no meu laptop Windows 7 com gerenciamento avançado de memória virtual, ele demora muito, apenas tornando o sistema cada vez mais lento.


1
problema com a sua solução é, ele vai te dar muito rapidamente StackOverflowError de modo que é difícil chamá-lo loop infinito
user902383
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.