Javaの最も短い無限ループ文は何ですか?


8

私はJavaのゴルフに取り組んでおり、無限ループが必要です。明らかに、特にそのような表現力豊かな言語では、必要以上のバイトを使いたくないのです。

実行したいコードがあるとすると、ベースラインは明らかwhile(1>0)/*stmt*/に、1行に10文字while(1>0){/*stmt1*//*stmt2*/}以上、または複数行に12文字追加されています。私は永遠にループしたいコード(まあ、永遠のようです...ループから抜けたりループから戻ったりしたくないかもしれない)が特定の長さを持つため、追加の文字を追加する必要があります。実際にループさせるため。

最初はこれが最高だと思っていましたが、専門家にそれを捨ててもっと良いものを見つけられるかどうか確かめるつもりでした。


または何かのようなmain();
jimmy23013

@ jimmy23013いいえ、できますmain(null)
Ypnypn

@Ypnypnまたはmain(a)if mainがとして宣言されているpublic static void main(String[]a)
デニス

通常、JavaコンパイラやJITは末尾呼び出しの再帰を最適化しますか、またはこれらの再帰はスタックサイズによって制限されますか?
Steve Jessop、2015

回答:


14
for(;;){}

どの条件も常に真と評価しないため、機能します。中括弧の間にコードを挿入します。

いくつかのステートメントしか取得していない場合は、それらをヘッド((;;)の部分)内に配置できます。ループが引き続き実行されるのは、条件ステートメントがブール値ではない場合に、常にtrueとカウントされます。@ Ypnypnリマインダー


6
複数のステートメントがある場合は、1つを除くすべてをforループ自体に配置してください。例for(;;foo(),bar(),baz())quux();
Ypnypn

2
空のブレースをセミコロンに交換できますfor(;;);
ラチェットフリーク

@ratchetfreakループを破るつもりはないが、OPが破る能力を望んでいる場合のみ。
Alex A.

@ratchetfreakはい、単一行と複数行の両方を探していますが、Ypnypnの提案が実際に小さいかどうかは議論の余地があります。どちらにしても、目的をより明確にするために投稿を編集する必要があります。
corsiKa

@Ypnypnそれは合法的な構文だとは思わない。Javaにはコンマ演算子はありません(変数宣言で使用できます)。
トム・ホーティン-タックライン

1

Java-60バイト(完全なコード)

私はおそらく質問を正しく解釈していませんが、コンパイルして実行すると、このコードは無限にループすることになり、技術的には永久に実行されるはずですが、通常はスタックメモリを使い果たします。

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

コーディンググラウンドでは、非常に速く終了します。高度な仮想メモリ管理を備えた私のWindows 7ラップトップでは、長時間実行され、システムがますます遅くなります。


1
あなたの解決策の問題は、StackOverflowErrorを非常に迅速に与えるため、無限ループと呼ぶのが難しい
user902383
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.