Câu lệnh lặp vô hạn ngắn nhất trong Java là gì?


8

Tôi đang làm việc trên một sân gôn cho Java và tôi cần một vòng lặp vô hạn. Rõ ràng, tôi không muốn sử dụng nhiều byte hơn mức tôi phải làm, đặc biệt là trong một ngôn ngữ biểu cảm như vậy.

Giả sử tôi có một số mã tôi muốn chạy, rõ ràng đường cơ sở được đặt ở mức while(1>0)/*stmt*/hoặc 10 ký tự bổ sung cho một dòng và while(1>0){/*stmt1*//*stmt2*/}hoặc 12 ký tự bổ sung cho nhiều dòng. Tôi nói bổ sung bởi vì mã tôi muốn lặp mãi mãi để làm cho nó thực sự lặp.

Lúc đầu, tôi nghĩ rằng đây là thứ tốt nhất tôi có được, nhưng tôi nghĩ rằng tôi sẽ ném nó cho các chuyên gia để xem liệu họ có thể tìm thấy thứ tốt hơn không.


Hay một cái gì đó như thế main();nào?
jimmy23013

@ jimmy23013 Không, nhưng bạn có thể làm được main(null).
Ypnypn

@Ypnypn Hoặc main(a)nếu mainđược khai báo là public static void main(String[]a).
Dennis

Các trình biên dịch Java hoặc JIT không được quan tâm thường tối ưu hóa đệ quy cuộc gọi đuôi, hoặc các lần thu hồi này bị giới hạn bởi kích thước ngăn xếp?
Steve Jessop

Câu trả lời:


14
for(;;){}

Nó hoạt động gây ra không có điều kiện đánh giá luôn luôn đúng. Chèn mã giữa các dấu ngoặc nhọn.

Nếu bạn chỉ có một vài câu lệnh, bạn có thể đặt chúng bên trong phần đầu (phần (;;). Vòng lặp đó vẫn chạy được gây ra bởi khi câu lệnh điều kiện không phải là boolean, nó được tính là luôn luôn đúng. nhắc nhở


6
Nếu bạn có nhiều câu lệnh, hãy thử đặt tất cả trừ một câu lệnh vào chính vòng lặp for. ví dụ:for(;;foo(),bar(),baz())quux();
Ypnypn

2
bạn có thể trao đổi niềng răng trống để lấy dấu chấm phẩyfor(;;);
ratchet freak

@ratchetfreak Chỉ khi bạn không có ý định phá vỡ vòng lặp, nhưng OP mà họ muốn có khả năng phá vỡ.
Alex A.

@ratchetfreak Có Tôi đang tìm kiếm cả đơn và đa dòng, mặc dù vẫn còn tranh cãi liệu đề xuất của Ypnypn có thực sự nhỏ hơn không. Dù bằng cách nào, tôi nên chỉnh sửa bài viết của mình để làm cho mục tiêu của tôi rõ ràng hơn.
corsiKa

@Ypnypn Tôi không nghĩ đó là cú pháp hợp pháp. Không có toán tử dấu phẩy trong Java (mặc dù nó có thể được sử dụng trong khai báo biến).
Tom Hawtin - tackline

1

Java - 60 byte (mã hoàn chỉnh)

Tôi có thể không giải thích chính xác câu hỏi, nhưng mã này khi được biên dịch và chạy kết quả trong một vòng lặp vô hạn, về mặt kỹ thuật, nó sẽ chạy mãi mãi, nhưng thường thì nó sẽ làm cạn kiệt bộ nhớ ngăn xếp.

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

Trên Coding Ground, nó kết thúc khá nhanh, trên máy tính xách tay Windows 7 của tôi có quản lý bộ nhớ ảo tiên tiến, nó chạy rất lâu, chỉ làm cho hệ thống chậm hơn và chậm hơn.


1
Vấn đề với giải pháp của bạn là, nó sẽ cung cấp cho bạn khá nhanh StackOverflowError nên khó có thể gọi nó là vòng lặp vô hạn
user902383
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.