2013-12-09 19 views
5

Đây là một câu hỏi rất chủ quan, vì vậy tôi sẽ cụ thể hơn. Có thời gian mà một vòng lặp do-while sẽ là một phong cách mã hóa tốt hơn so với một vòng lặp while bình thường không?Khi nào một vòng lặp do-while sẽ tốt hơn vòng lặp while?

ví dụ:

int count = 0; 
do { 
    System.out.println("Welcome to Java"); 
    count++; 
} while (count < 10);` 

Điều này dường như không có ý nghĩa khi kiểm tra điều kiện trong khi sau khi đánh giá tuyên bố do (còn gọi buộc phải thực hiện lệnh ít nhất một lần).

Đối với một cái gì đó đơn giản như ví dụ trên của tôi, tôi sẽ tưởng tượng rằng:

int count = 0; 
while(count < 10) { 
    System.out.println("Welcome to Java"); count++; 
} 

sẽ được thường được coi là đã được viết bằng một văn phong tốt hơn.

Có ai có thể cung cấp cho tôi ví dụ làm việc về thời điểm một vòng lặp trong khi đó được coi là tùy chọn duy nhất/tốt nhất không? Bạn có vòng lặp do-while trong mã của mình không? Nó đóng vai trò gì và tại sao bạn chọn tham gia vòng lặp do-while?

(Tôi đã có một ý niệm mơ hồ cảm thấy rằng vòng lặp do-while có thể sử dụng trong mã hóa trò chơi. Đúng tôi, các nhà phát triển trò chơi, nếu tôi sai!)

+0

thể trùng lặp của [Tại sao lại sử dụng vòng lặp "do while"?] (Http://stackoverflow.com/questions/3003456/why-use-a-do-while-loop) –

+0

@StephenC thực sự tôi đã làm! – AlexMTMorgan

Trả lời

3

Nếu bạn muốn đọc dữ liệu từ ổ cắm mạng cho đến khi tìm thấy chuỗi ký tự, trước tiên bạn cần đọc dữ liệu và sau đó kiểm tra dữ liệu cho chuỗi thoát.

do 
{ 
    // read data 
} while (/* data is not escape sequence */); 
0

Nếu điều kiện vòng lặp chỉ có thể được biết đến sau một bước đầu tiên của vòng lặp (khi bạn không muốn điều kiện trước khi bạn nhập vòng lặp). Điển hình:

do { 
    expr = ...; 
while (expr); 
+0

Bạn có lẽ có một ví dụ? – AlexMTMorgan

+1

Ví dụ: nhắc người dùng nhập vào hoặc một số nguồn bên ngoài. –

+1

Có một ví dụ ở đây: http://stackoverflow.com/questions/3347001/do-while-vs-while –

1

đơn giản, khi bạn muốn kiểm tra điều kiện trước và sau đó thực hiện thao tác while là lựa chọn tốt hơn, và nếu bạn muốn thực hiện thao tác ít nhất một lần và sau đó kiểm tra điều kiện do-while là tốt hơn.
Theo câu hỏi của bạn một ví dụ làm việc,
1. khi tôi cần để tìm field mà có thể được công bố trong cùng một lớp hoặc lớp siêu hoặc lớp siêu mà siêu lớp và vân vân nghĩa là việc tìm kiếm các lĩnh vực nằm trong phân cấp lớp sâu. (A extends BB extends C và vân vân)

public Field SearchFieldInHierarchy(Object classObj, String fieldName) 
{ 
    Field type = null; 
    Class clz = classObj.getClass(); 
    do 
    { 
     try 
     { 
      type = clz.getDeclaredField(fieldName); 
      break; 
     } catch (NoSuchFieldException e) 
     { 
      clz = clz.getSuperclass(); 
     } 
    } while(clz != null || clz != Object.class);   
    return type; 
} 

2. Khi đọc input stream từ Http phản ứng

do 
    { 
     bytesRead = inputStream.read(buffer, totalBytesRead, buffer.length - totalBytesRead); 
     totalBytesRead += bytesRead; 
    } while (totalBytesRead < buffer.length && bytesRead != 0); 
+0

Bất kỳ lý do bỏ phiếu nào ??? – dbw

0

Bạn loại trả lời câu hỏi cho mình, khi nó cần phải chạy ít nhất một lần, và nó có ý nghĩa để đọc nó theo cách đó.

1

Vòng lặp do-while về cơ bản là phiên bản ngược của vòng lặp while.

Nó thực hiện các câu lệnh vòng lặp vô điều kiện lần đầu tiên.

Sau đó, nó sẽ đánh giá biểu thức có điều kiện được chỉ định trước khi thực hiện lại các câu lệnh.

int sum = 0; 
int i = 0; 
do 
{ 
    sum += ids[i]; 
    i++; 
} while (i < 4); 

Reference material

0

làm - Vòng lặp while cho phép bạn để đảm bảo rằng các đoạn mã được thực hiện ít nhất một lần trước khi nó đi vào lặp.

0

Trong một vòng lặp while, điều kiện được kiểm tra trước khi nó thực thi mã trong vòng lặp. Trong vòng lặp do while, mã được thực thi trước khi điều kiện được kiểm tra, dẫn đến mã luôn được thực thi ít nhất một lần. Ví dụ:

$value = 5; 

while($value > 10){ 
    echo "Value is greater than 10"; 
} 

Ở trên sẽ không bao giờ xuất ra bất kỳ thứ gì. Nếu chúng tôi làm như vậy lần nữa như sau:

$value = 5; 

do{ 
    echo "Value is greater than 10"; 
}while($value > 10) 

Đầu ra sẽ được kiểm tra sau khi vòng lặp được thực hiện. Sau này nó sẽ không sản xuất thêm bất cứ điều gì.

4

Tuyên bố while tục thực hiện một khối lệnh trong khi một điều kiện cụ thể là đúng

while (expression) { 
    statement(s) 
} 

do-while đánh giá biểu hiện của nó ở dưới cùng của vòng lặp, và do đó, các câu lệnh trong khối làm luôn được thực thi ít nhất một lần.

do { 
    statement(s) 
} while (expression); 

Bây giờ sẽ nói về sự khác biệt chức năng,

while-loops bao gồm một lệnh rẽ nhánh có điều kiện như if_icmpge hoặc if_icmplt và một lệnh goto. Lệnh điều kiện nhánh thực thi lệnh ngay sau vòng lặp và do đó kết thúc vòng lặp nếu điều kiện không được đáp ứng. Lệnh cuối cùng trong vòng lặp là một goto phân nhánh mã byte trở lại đầu của vòng lặp đảm bảo mã byte giữ vòng lặp cho đến khi nhánh có điều kiện được đáp ứng.

A Do-while-loops cũng rất giống với vòng lặp và vòng lặp ngoại trừ việc chúng không yêu cầu lệnh goto làm nhánh có điều kiện là lệnh cuối cùng và được sử dụng để lặp lại đầu vòng lặp luôn chạy thân vòng lặp ít nhất một lần - nó bỏ qua kiểm tra điều kiện ban đầu. Vì nó bỏ qua kiểm tra đầu tiên, một chi nhánh sẽ ít hơn và một điều kiện ít hơn để được đánh giá.

Bằng cách sử dụng do-while bạn có thể đạt được hiệu suất nếu biểu thức/điều kiện phức tạp, vì nó được đảm bảo lặp ít nhất một lần.Trong trường hợp đó do-while could call for performance gain

phát hiện rất ấn tượng ở đây, http://blog.jamesdbloom.com/JavaCodeToByteCode_PartOne.html#while_loop

0

Sử dụng câu lệnh while khi bạn phải kiểm tra tình trạng lặp đi lặp lại và chỉ khi điều kiện được thỏa mãn thực hiện vòng lặp

while(condition) //eg. a>5 
{ 
Body of Loop 
} 
  • Nếu bạn thấy dòng điều khiển ở đây bạn có thể thấy rằng điều kiện được kiểm tra trước khi thực hiện vòng lặp, nếu điều kiện không đáp ứng vòng lặp sẽ không thực thi tại tất cả

Trong tuyên bố Đỗ-Trong khi chương trình sẽ thực hiện phần thân của vòng lặp lần và sau đó nó sẽ kiểm tra nếu tuyên bố là đúng hay không

do 
    { 
Body of Loop 
} 

while(condition); //eg. a>5 
  • Nếu bạn nhận thấy dòng chảy của kiểm soát ở đây bạn sẽ thấy rằng cơ thể được thực hiện một lần, sau đó điều kiện được kiểm tra. Nếu điều kiện là sai Chương trình sẽ thoát ra khỏi vòng lặp, nếu True nó sẽ tiếp tục thực hiện cho đến khi điều kiện là không hài lòng
  • Cần lưu ý rằng trong khi và do- trong khi cung cấp cho cùng một đầu ra chỉ dòng chảy kiểm soát là khác nhau
1

/* 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