Was ist die kürzeste Endlosschleifenanweisung in Java?


8

Ich arbeite an einem Golf für Java und brauche eine Endlosschleife. Natürlich möchte ich nicht mehr Bytes ausgeben als nötig, insbesondere in einer so ausdrucksstarken Sprache.

Angenommen, ich habe Code, den ich ausführen möchte, ist die Grundlinie offensichtlich auf while(1>0)/*stmt*/oder 10 zusätzliche Zeichen für eine einzelne Zeile und while(1>0){/*stmt1*//*stmt2*/}oder 12 zusätzliche Zeichen für mehrere Zeilen festgelegt. Ich sage zusätzlich, weil der Code, den ich für immer schleifen möchte (na ja, für immer ... ich kann aus der Schleife ausbrechen oder aus ihr zurückkehren möchte oder nicht), eine bestimmte Länge haben wird, und dann muss ich zusätzliche Zeichen anheften um es tatsächlich zu schleifen.

Zuerst dachte ich, dies sei das Beste, was ich bekommen würde, aber ich dachte, ich würde es den Experten überlassen, um zu sehen, ob sie ein besseres finden können.


Oder so ähnlich main();?
Jimmy23013

@ Jimmy23013 Nein, aber du kannst es tun main(null).
Ypnypn

@Ypnypn Oder main(a)wenn mainals deklariert ist public static void main(String[]a).
Dennis

Optimieren Java-Compiler oder JITs aus Interesse normalerweise die Tail-Call-Rekursion oder sind diese Rekursionen durch die Stapelgröße begrenzt?
Steve Jessop

Antworten:


14
for(;;){}

Es funktioniert, weil keine Bedingung als immer wahr ausgewertet wird. Fügen Sie den Code zwischen die geschweiften Klammern ein.

Wenn Sie nur wenige Anweisungen erhalten haben, können Sie diese im Kopf platzieren (der (;;) - Teil. Dass die Schleife noch ausgeführt wird, wird dadurch verursacht, dass die Bedingungsanweisung, wenn sie kein Boolescher Wert ist, als immer wahr gilt. Vielen Dank an @Ypnypn für den Erinnerung


6
Wenn Sie mehrere Anweisungen haben, versuchen Sie, alle bis auf eine in die for-Schleife selbst einzufügen. zBfor(;;foo(),bar(),baz())quux();
Ypnypn

2
Sie können die leeren Klammern gegen einen Semikolonfor(;;);
Ratschenfreak

@ratchetfreak Nur wenn Sie nicht beabsichtigen, die Schleife zu brechen, sondern das OP, das sie die Fähigkeit haben wollen, zu brechen.
Alex A.

@ratchetfreak Ja, ich suche sowohl einzeilig als auch mehrzeilig, obwohl es fraglich ist, ob der Vorschlag von Ypnypn tatsächlich kleiner sein könnte. In jedem Fall sollte ich meinen Beitrag bearbeiten, um mein Ziel klarer zu machen.
CorsiKa

@Ypnypn Ich glaube nicht, dass das eine legale Syntax ist. In Java gibt es keinen Kommaoperator (obwohl er in Variablendeklarationen verwendet werden kann).
Tom Hawtin - Tackline

1

Java - 60 Bytes (vollständiger Code)

Ich interpretiere die Frage wahrscheinlich nicht richtig, aber dieser Code führt beim Kompilieren und Ausführen zu einer Endlosschleife, da er technisch für immer ausgeführt werden sollte, aber normalerweise den Stapelspeicher erschöpft.

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

Auf Coding Ground endet es ziemlich schnell, auf meinem Windows 7-Laptop mit erweiterter Verwaltung des virtuellen Speichers läuft es lange und macht das System immer langsamer.


1
Problem mit Ihrer Lösung ist, es wird Ihnen ziemlich schnell StackOverflowError geben, so dass es schwierig ist, es Endlosschleife zu nennen
user902383
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.