CodeGym /Các khóa học /C# SELF /Vòng lặp while: làm quen và những điều cần chú ý khi dùng...

Vòng lặp while: làm quen và những điều cần chú ý khi dùng

C# SELF
Mức độ , Bài học
Có sẵn

1. Giới thiệu

Trong lập trình, tụi mình thường xuyên phải làm đi làm lại một việc nhiều lần. Ví dụ như:

  • Duyệt qua tất cả phần tử trong một list.
  • Nhập giá trị từ bàn phím cho đến khi user nhập đúng cái cần thiết.
  • Tính tổng tất cả số từ 1 đến 100.
  • Yêu cầu user nhập mật khẩu cho đến khi đúng thì thôi.

Nếu thử code mấy cái này mà không dùng vòng lặp thì sẽ rất dài dòng, chán và không thể mở rộng. Thử tưởng tượng bạn viết một chương trình máy tính cầm tay và quyết định cộng các số từ 1 đến 10 bằng tay:

int sum = 0;
sum += 1;
sum += 2;
sum += 3;
// ... và cứ thế 10 lần. Chán thật.
Lặp lại thủ công mà không có vòng lặp — bất tiện vãi!

Bạn sẽ chán chết trước khi xong! Giải pháp là vòng lặp. Nó giúp bạn mô tả việc lặp lại một cách ngắn gọn và dễ hiểu. Hôm nay tụi mình sẽ làm quen với vòng lặp cơ bản nhất nhưng cực kỳ hữu ích — while.

2. Làm quen với vòng lặp while

Cú pháp và sơ đồ cơ bản

Vòng lặp while giống như một con vẹt trong thế giới lập trình: nó lặp lại một đoạn code cho đến khi điều kiện còn đúng. Khi điều kiện không còn đúng nữa, con vẹt im luôn (vòng lặp kết thúc).


while (điều kiện)
{
    // Thân vòng lặp
}
Cách viết vòng lặp while với block lệnh

Lưu đồ

Đây là một sơ đồ khối đơn giản để hiểu cách vòng lặp while hoạt động:

3. Ví dụ: vòng lặp while trong thực tế

Bộ đếm kinh điển

Làm thử một chương trình đơn giản đếm từ 1 đến 5 và in ra số:

int i = 1;
while (i <= 5)
{
    Console.WriteLine($"Bước số {i}");
    i++; // Nhớ tăng biến đếm nha!
}
// Sẽ in ra:
// Bước số 1
// Bước số 2
// Bước số 3
// Bước số 4
// Bước số 5

Lưu ý: nếu quên tăng biến i, vòng lặp sẽ không bao giờ kết thúc (con vẹt của bạn sẽ bất tử và lặp mãi mãi). Cái này gọi là vòng lặp vô hạn — nghe hơi ghê.

Nhập từ bàn phím cho đến khi đúng giá trị

Nhiều khi vòng lặp dùng để "ép" user nhập đúng đáp án:

string password = "";
while (password != "qwerty")
{
    Console.Write("Nhập mật khẩu: ");
    password = Console.ReadLine();
}
Console.WriteLine("Chào mừng!");

Ở đây chương trình sẽ yêu cầu nhập mật khẩu cho đến khi bạn gõ đúng "qwerty". Nhớ nha: nếu xóa dòng password = Console.ReadLine();, vòng lặp lại thành vô hạn (sẽ hỏi mật khẩu nhưng không đọc input — treo luôn như robot bị lỗi).

4. Các loại và kịch bản dùng vòng lặp while

Vòng lặp while thông thường

Vòng lặp này, như đã nói ở trên, sẽ kiểm tra điều kiện trước lần lặp đầu tiên. Nếu điều kiện sai ngay từ đầu — thân vòng lặp sẽ không chạy lần nào.

Ví dụ: điều kiện sai ngay từ đầu

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Sẽ không bao giờ chạy!
}

Nghe cũng hợp lý mà. Đúng như code ghi luôn.

Vòng lặp lồng nhau while

Đôi khi cần vòng lặp trong vòng lặp. Ví dụ, duyệt qua từng dòng, và trong mỗi dòng kiểm tra từng ký tự. Ở giai đoạn này thì hơi phiêu, nhưng đây là ví dụ đơn giản:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        Console.WriteLine($"i = {i}, j = {j}");
        j++;
    }
    i++;
}

// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2

Chi tiết về vòng lặp lồng nhau tụi mình sẽ học sau vài bài nữa, giờ chỉ muốn dọa bạn tí thôi :)

Vòng lặp vô hạn

Có lúc vòng lặp kết thúc, có lúc — sống mãi.

while (true)
{
    Console.WriteLine("Tôi bất tử!");
}

Dùng không nhiều, thường cho mấy process chạy nền (kiểu như server), nhưng cũng có lúc cần.

5. Để không viết code ngớ ngẩn: lỗi thường gặp với while

Trong lập trình, vòng lặp giống như điện: xịn, nhưng phải biết dùng cho an toàn.

Vấn đề 1: vòng lặp vô hạn do bất cẩn

Rất nhiều bạn mới học quên cập nhật biến điều kiện. Kết quả là vòng lặp chạy "vô hạn", phải dừng chương trình bằng tay (ví dụ nhấn Ctrl + C).

int i = 1;
while (i <= 5)
{
    Console.WriteLine(i);
    // i++;  // Ôi! Quên tăng i rồi
}

Vấn đề 2: điều kiện sai

Đôi khi dev tự đào hố cho mình: điều kiện lại không bao giờ đúng. Kết quả là vòng lặp không chạy tí nào.

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Đoạn code này sẽ không bao giờ chạy.
    i++;
}

Vấn đề 3: lỗi kiểu dữ liệu

Điều kiện vòng lặp luôn phải là biểu thức boolean — tức là kết quả phải là true hoặc false.

int number = 5;
while (number) // Lỗi! Cần bool, không phải int.
{
    number--;
}
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION