2011-08-16 32 views

Trả lời

70

Một vòng lặp for trong java có cấu trúc sau -

for (initialization statement; condition check; update) 
    loop body; 

Như bạn thấy, có bốn câu ở đây -

  1. khởi tuyên bố: Tuyên bố này được thực hiện chỉ một lần, khi vòng lặp được nhập lần đầu tiên. Đây là một câu lệnh tùy chọn, có nghĩa là bạn có thể chọn để trống trường này. Nó thường được sử dụng cho một số mục đích khởi tạo.
  2. Kiểm tra có điều kiện: Tuyên bố này có lẽ là quan trọng nhất. Nó kiểm tra để xác minh xem biểu thức nào đó có được đánh giá là đúng hay không. Nếu có, thì việc thực hiện vòng lặp tiếp tục. Bạn có thể chọn để trống trường này, trường này sẽ được đánh giá là true.
  3. Cập nhật: Danh sách câu lệnh này được thực hiện từ trái sang phải, thường được sử dụng để tăng/giảm một số biến.
  4. thân vòng lặp: Phần thân của vòng lặp sẽ được thực hiện lặp đi lặp lại dựa trên giá trị chân lý của kiểm tra có điều kiện.

Về cơ bản đây là cách thực hiện sau - đầu tiên, khi vòng lặp được nhập lần đầu tiên, câu lệnh khởi tạo được thực hiện một lần. Sau đó, kiểm tra có điều kiện được thực thi để xem liệu nó có được đánh giá là đúng hay không. Nếu có, thì phần thân vòng lặp được thực hiện, nếu không việc thực thi vòng lặp kết thúc. Sau đó, (các) câu lệnh Update được thực hiện. Tiếp theo, kiểm tra có điều kiện được thực hiện một lần nữa, và nếu nó đánh giá đúng, thì một lần nữa thân vòng lặp được thực thi, sau đó câu lệnh cập nhật được thực thi, sau đó lại kiểm tra điều kiện .... bạn sẽ có được hình ảnh.

Bây giờ, về cú pháp for(; ;) của bạn. Nó không có câu lệnh khởi tạo, vì vậy không có gì sẽ được thực hiện. Đó là tuyên bố kiểm tra có điều kiện cũng trống, vì vậy có nghĩa là nó đánh giá đúng. Sau đó, thân vòng lặp được thực hiện.Tiếp theo, vì câu lệnh cập nhật trống, không có gì được thực hiện. Sau đó, kiểm tra có điều kiện được thực hiện một lần nữa mà sẽ đánh giá lại thành true và sau đó toàn bộ quá trình này sẽ lặp lại.

Vì vậy, bạn thấy, đây là cơ bản một vòng lặp vô hạn mà không có tuyên bố khởi, mà có điều kiện kiểm tra sẽ luôn đánh giá đúng, và đó không có báo cáo cập nhật. Điều này tương đương với -

while(true) 
{ 
    ..... 
} 

là một cấu trúc vòng lặp phổ biến khác trong java.

Khi bạn sử dụng một vòng lặp vô hạn như thế này, đó là chú ý quan trọng đối với tình trạng vi phạm như trong hầu hết các trường hợp, bạn không thể để cho một vòng lặp để chạy vô thời hạn. Để thoát ra khỏi các loại vòng này, bạn có thể sử dụng câu lệnh break. Cấu trúc như sau -

if(some_condition_is_true) 
    break;  // This will cause execution to break out of its nearest loop 

hoặc

if(some_condition_is_false) 
    break; 
34

Đây là giống như:

while(true) { 
    //Some Stuff 
} 

Về cơ bản, một cú pháp thay thế cho một vòng lặp vô hạn.

+0

Mặc dù chúng ta được dạy để avoi d bằng cách sử dụng vòng lặp vô hạn, tôi phạm tội một lúc (đúng) trên nhiều hơn một lần. –

+2

Tôi cảm thấy như họ có những khoảnh khắc của họ, nơi họ có ích – user489041

+4

Ít nhất nếu bạn sử dụng while (true) người đọc mã dường như có thể hiểu nó ... – PeterT

6

Vòng lặp này không có bảo vệ và hoạt động như một vòng lặp while (true). Nó sẽ lặp vô hạn cho đến khi nghỉ ngơi.

+3

hoặc trả lại! ... ~ –

+10

hoặc một chồng tràn –

+0

tôi không nên tưởng tượng chồng này tràn như không có chồng sẽ trở lại vào đầu của một vòng lặp. – Wes

2

Đó là vòng lặp vô hạn. Các câu lệnh khởi tạo, điều kiện và gia tăng là tất cả tùy chọn, do đó không có bất kỳ phần tử nào trong số chúng, điều này sẽ luôn lặp lại (trừ khi ngắt được nhấn hoặc một số cấu trúc khác tương tác với nó).

Mặc dù tôi không chắc chắn về Java, this question giải thích cách thức. Net trống forwhile (true) của bạn sẽ được biên dịch chính xác giống như vậy. Tôi sẽ không ngạc nhiên nếu Java cũng vậy.

3

Đó là vòng lặp vô hạn. Không chính xác mã hóa tốt bởi vì nó không phải là trực quan mà sẽ thực sự biên dịch hay không ném một lỗi thời gian chạy. Viết lại là while(true) { /* code */ } sẽ dễ đọc hơn nhiều để chỉ ra một vòng lặp vô hạn.

+0

Bạn quên khung đóng cửa trong ví dụ mã của bạn; D –

+0

bạn là đúng rằng mã của tôi sẽ không đón khung bế mạc như được viết vì những nhận xét nội tuyến, nhưng tôi chỉ muốn có nó trên cùng một dòng. –

8

Đây là tất cả các vòng lặp vô hạn

for(;;) { 
    // endlessly 
} 

while(true) { 
    // endlessly 
} 

do { 
    // endlessly 
} while(true); 
0

/* Vòng lặp while

5 Bucks

1 sô cô la = 1 Bucks

while my money is greater than 1 bucks 
    select chocolate 
    pay 1 bucks to the shopkeeper 
    money = money - 1 
end 

đến nhà và không thể đi đến khi cửa hàng vì tiền của tôi = 0 Bucks */

#include<stdio.h> 
int main(){ 
    int money = 5; 

    while(money >= 1){ 
    printf("inside the shopk and selecting chocolate\n"); 
    printf("after selecting chocolate paying 1 bucks\n"); 
    money = money - 1 ; 
    printf("my remaining moeny = %d\n", money); 
    printf("\n\n"); 
    } 

    printf("dont have money cant go inside the shop, money = %d", money); 

    return 0; 
} 

vô hạn tiền

while(codition){ // condition will always true ....infinite loop 
    statement(s) 
} 

vui lòng truy cập video này để hiểu rõ hơn https://www.youtube.com/watch?v=eqDv2wxDMJ8&t=25s

Các vấn đề liên quan