Trang chủ C# cơ bản Vòng lặp do - while trong C#

Vòng lặp do - while trong C#

Nguyễn Dương 07-06-2024

Trong bài viết trước, chúng ta đã cùng tìm hiểu về vòng lặp while trong C#, đây cũng là một vòng lặp được sử dụng rất linh hoạt. Nay trong bài viết này, chúng ta cùng tìm hiểu về vòng lặp do - while nhé.
Trong C#, vòng lặp do - while được sử dụng để lặp đi lặp lại một đoạn code nào đó. Nếu số lần lặp không cố định và bạn phải thực hiện vòng lặp ít nhất một lần, thì nên sử dụng vòng lặp do - while.

Cú pháp
do{  
      //Khối lệnh thực thi 
} while (điều kiện lặp);

Điều kiện lặp là một biểu thức logic bắt buộc phải có với kết quả trả về bắt buộc là true hoặc false.
- Các câu lệnh trong khối lệnh sẽ được lặp lại đến khi không còn thỏa mãn điều kiện lặp nữa thì sẽ kết thúc vòng lặp do - while.
- Vòng lặp do - while được thực thi ít nhất một lần vì điều kiện được kiểm tra sau thân vòng lặp.

Sơ đồ cấu trúc vòng lặp do - while
- Đầu tiên trình biên dịch sẽ thực hiện khối lệnh, sau đó kiểm tra điều kiện. Nếu thỏa mãn điều kiện thì tiếp tục thực hiện khối lệnh, nếu không thỏa mãn điều kiện thì thoát vòng lặp.
- Điều kiện lặp luôn bằng True thì vòng lặp sẽ lặp vô hạn. 

Ví dụ 1: in ra màn hình dãy số nguyên từ 1 đến 999
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace vong_lap_do_while
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 1;
            do
            {
                Console.Write("{0,5}", i);
                i++;
            } while (i < 1000);
            Console.ReadLine();
        }
    }
}

Kết quả: 

Ví dụ 2: Mình sẽ làm tương tự ví dụ trên nhưng giá trị khởi tạo của biến i thì mình sẽ làm cho không thỏa mãn điều kiện.
int i = 15;
do
{
     Console.Write("{0,3}", i);
     i++;
} while (i < 10);
Console.ReadLine();

Biến i mình sẽ khởi tạo giá trị là 15, điều kiện là i nhỏ hơn 10. Chạy chương trình thì máy vẫn in ra màn hình 1 số là 15. Vì trình biên dịch sẽ thực thi câu lệnh in giá trị của i ra đầu tiên, sau đó mới kiểm tra điều kiện.

Ví dụ 3: Mình sẽ tạo ra vòng lặp vô hạn khi in giá trị biến i ra màn hình
int i = 1;
do
{
     Console.Write("{0,3}", i);
} while (i == 1);
Console.ReadLine();

Kết quả: 

Vì i luôn luôn bằng 1 nên câu lệnh sẽ được thực thi vô hạn lần.

Ví dụ 4: in ra màn hình ma trận số gồm 15 hàng và 9 cột. Mỗi hàng là 1 dãy số tự nhiên từ 1 đến 9. 

Cách 1: Mình sẽ sử dụng 2 vòng lặp do - while lồng nhau
int countRow = 1;
int countCol = 1;
int maxRow = 15;
int maxCol = 9;
do
{
    do
    {
         Console.Write("{0,3}", countCol);
         countCol++;
    } while (countCol <= maxCol);
countCol = 1;
countRow++;
Console.WriteLine();
} while (countRow <= maxRow);
Console.ReadLine();

Cách 2: Mình sử dụng 2 vòng lặp do - while và while lồng nhau
int countRow = 1;
int countCol = 1;
int maxRow = 15;
int maxCol = 9;
do
{
    countCol = 1;
    while (countCol <= maxCol)
    {
          Console.Write("{0,3}", countCol);
          countCol++;
    }
    Console.WriteLine();
    countRow++;
} while (countRow <= maxRow);
Console.ReadKey();

Các bạn hãy tự dịch từng dòng code sẽ thấy kết quả của 2 cách sẽ như nhau. Nói chung 2 cách này sử dụng dụng thuật toán như nhau, chỉ khác cách viết code.

SO SÁNH VÒNG LẶP FOR, WHILE, DO - WHILE

 Vòng lặp for: Số vòng lặp được biết trước, kiểm tra điều kiện trước và thực hiện đoạn code bên trong vòng lặp khi thỏa mãn điều kiện, vì vậy đoạn code bên trong vòng lặp for có thể không được thực hiện lần nào nếu điều kiện sai.
Vòng lặp while: Số vòng lặp là không biết trước, kiểm tra điều kiện trước và thực hiện đoạn code bên trong vòng lặp khi thỏa mãn điều kiện, vì vậy đoạn code bên trong vòng lặp while có thể không được thực hiện lần nào nếu điều kiện sai.
Vòng lặp do - while: Số vòng lặp là không biết trước, thực thi đoạn code bên trong vòng lặp trước rồi mới kiểm tra điều kiện, vì vậy đoạn code bên trong vòng lặp do while được thực hiện ít nhất 1 lần.

Bài viết liên quan

Hàm đệ quy trong C# Hàm đệ quy trong C#
enum trong C# enum trong C#
Struct trong C# Struct trong C#
Lớp String trong C# Lớp String trong C#
Vòng lặp foreach trong C# Vòng lặp foreach trong C#
Mảng đa chiều, mảng của mảng trong C# Mảng đa chiều, mảng của mảng trong C#