Apa pernyataan loop tak terbatas terpendek di Jawa?

8

Saya sedang mengerjakan golf untuk Java dan saya membutuhkan loop tak terbatas. Jelas, saya tidak ingin menghabiskan lebih banyak byte daripada yang harus saya lakukan, terutama dalam bahasa yang begitu ekspresif.

Dengan asumsi saya memiliki beberapa kode yang ingin saya jalankan, jelas garis dasarnya ditetapkan pada while(1>0)/*stmt*/atau 10 karakter tambahan untuk satu baris dan while(1>0){/*stmt1*//*stmt2*/}atau 12 karakter tambahan untuk beberapa baris. Saya katakan tambahan karena kode yang ingin saya loop selamanya (well, forever-ish ... Saya mungkin atau mungkin tidak ingin keluar atau kembali dari loop) akan memiliki panjang tertentu, dan kemudian saya harus menempel pada karakter tambahan untuk membuatnya benar-benar loop.

Pada awalnya saya pikir ini yang terbaik yang saya dapatkan, tetapi saya pikir saya akan memberikannya kepada para ahli untuk melihat apakah mereka dapat menemukan yang lebih baik.

corsiKa
sumber
Atau semacamnya main();?
jimmy23013
@ jimmy23013 Tidak, tetapi Anda bisa melakukannya main(null).
Ypnypn
@Ypnypn Atau main(a)jika maindinyatakan sebagai public static void main(String[]a).
Dennis
Di luar ketertarikan, apakah kompiler Java atau JIT biasanya mengoptimalkan rekursi panggilan balik, atau apakah rekursi ini dibatasi oleh ukuran tumpukan?
Steve Jessop

Jawaban:

14
for(;;){}

Ini berfungsi karena tidak ada kondisi yang dinilai selalu benar. Masukkan kode antara kawat gigi.

Jika Anda hanya mendapatkan beberapa pernyataan, Anda dapat menempatkannya di dalam bagian kepala (bagian (;;). Bahwa loop masih berjalan disebabkan oleh ketika pernyataan kondisi bukan boolean itu dianggap sebagai selalu benar. Terima kasih kepada @Ypnypn untuk peringatan

masterX244
sumber
6
Jika Anda memiliki banyak pernyataan, coba letakkan semuanya kecuali satu di for for loop itu sendiri. misalnya,for(;;foo(),bar(),baz())quux();
Ypnypn
2
Anda dapat menukar kawat gigi kosong dengan titik komafor(;;);
ratchet freak pada
@ratchetfreak Hanya jika Anda tidak bermaksud untuk memutus perulangan, tetapi OP yang mereka inginkan kemampuan untuk memutuskan.
Alex A.
@ratchetfreak Ya Saya mencari keduanya, baik multi-line, meskipun masih bisa diperdebatkan apakah saran Ypnypn mungkin sebenarnya lebih kecil. Either way, saya harus mengedit posting saya untuk membuat tujuan saya lebih jelas.
corsiKa
@ Ypnypn Saya tidak berpikir itu sintaks hukum. Tidak ada operator koma di Jawa (meskipun dapat digunakan dalam deklarasi variabel).
Tom Hawtin - tackline
1

Java - 60 byte (kode lengkap)

Saya mungkin tidak menafsirkan pertanyaan dengan benar, tetapi kode ini ketika dikompilasi dan dijalankan menghasilkan loop infinite-ish, dalam hal itu secara teknis ia harus berjalan selamanya, tetapi biasanya itu akan menghabiskan memori stack.

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

Di Coding Ground, ini berakhir cukup cepat, pada laptop Windows 7 saya dengan manajemen memori virtual canggih, ini berjalan lama, hanya membuat sistem lebih lambat dan lebih lambat.


sumber
1
masalah dengan solusi Anda adalah, itu akan memberi Anda StackOverflowError cukup cepat sehingga sulit untuk menyebutnya infinite loop
user902383