2016-02-04 17 views
6

Tôi có thời gian gần đây một cuộc thảo luận về việc sử dụng không cần toa điều kiện cho-vòng liên quan trong Java:Đối với vòng lặp điều kiện công ước

for(int i = 0; o.getC() < 10; i++) 
    o.addC(i); 

Có ai biết nếu có bất kỳ công ước "chính thức" cho cho- điều kiện như thế này? Theo tôi nó dễ dàng hơn để đọc so với một tương đương trong khi vòng lặp bởi vì tất cả loop-thông số ở bên nhau trong dòng đầu tiên:

int i = 0; 
while(o.getC() < 10) { 
    i++; 
    o.addC(i); 
} 

Hoặc thậm chí tồi tệ hơn:

int i = 0; 
while(o.getC() < 10) 
    o.addC(++i); 
+1

Bạn có ý nghĩa gì với các điều kiện liên quan không truy cập? Điều này cho chắc chắn là truy cập liên quan. –

+1

Vòng lặp for tốt nhất là (IMO) vì 1) 'i' bị nhiễu đến vòng lặp; 2) bạn buộc phải nhớ tăng (hoặc rõ ràng không tăng) 'i' trên mỗi lần lặp. Các tùy chọn thứ hai và thứ ba ở đây không thêm lợi thế cụ thể nào và ít có thể đọc được (đặc biệt là 'o.addC (++ i);'). –

+0

Bản sao có thể có của [khi sử dụng vòng lặp while thay vì vòng lặp] (http://stackoverflow.com/questions/6710601/when-to-use-while-loop-rather-than-for-loop) –

Trả lời

1

for vòng lặp được sử dụng trong mọi tình huống trên một giải pháp tương đương while. Mảng, danh sách, cấu trúc dữ liệu chuẩn.

Mặt khác while thường được sử dụng với nhiều con suối và lặp đi lặp lại vô hạn dài ..

0

Một điều tốt đẹp về cho vòng là có một phương pháp tắt. Vì vậy, nếu bạn muốn thực hiện tất cả các mục trong một mảng, bạn chỉ có thể thực hiện các thao tác sau:

(số kép: arrayName) trong đó double là kiểu, số là tên bạn đang cung cấp cho mỗi phần tử t vấn đề thực sự những gì bạn gọi nó, bạn sẽ đề cập đến mỗi giá trị ở đó là "số" trong trường hợp này). Và arrayName là tên của mảng mà bạn đang đề cập đến.

Nếu bạn muốn tiếp cận từng phần tử/đối tượng, đây là cách nhanh nhất.

+0

Nó được gọi là một vòng lặp nâng cao. (Tôi gọi nó là vòng lặp foreach). Và trên thực tế, nó không phải là "nhanh nhất" về tốc độ bởi vì dưới mui xe nó phải làm loại chuyển đổi và vẫn sử dụng một vòng lặp thường xuyên. –

+0

Ahh xin lỗi, tôi là một lập trình viên mới. Đã cố gắng giúp đỡ tuy nhiên tôi có thể: p –

0

Làm thế nào về:

for(int i = 0; i < MAX_ITERATIONS; i++) 
{ 
    o.addC(i); 
    if (o.getC() >= 10) 
     return o; // or break 
} 

Điều này ngăn cản một vòng lặp vô hạn nếu ADDC là không thực sự làm những gì bạn mong đợi.

1

Hầu hết các nhà phát triển sẽ mong đợi một tuyên bố for bao gồm ba điều:

  • khởi của một biến
  • Điều kiện chấm dứt dựa trên biến số
  • Tăng trên biến

Nếu bạn thay đổi mã của mình để chứa những thứ không mong muốn, mã sẽ khó đọc hơn và do đó khó bảo trì hơn.

Hơn nữa, tôi nghĩ rằng vòng lặp while làm cho ý định của bạn rõ ràng hơn: làm điều gì đó trong khi o.getC() ít hơn 10. "Điều gì đó" này xảy ra là: thêm số gia tăng.

Ngắn câu chuyện: sử dụng vòng lặp while cho "các điều kiện liên quan không phản đối".

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