Vòng lặp trong C#

Vòng lặp là gì?

Có thể có tình huống, khi bạn cần thực thi một khối mã nhiều lần. Nói chung, các câu lệnh được thực hiện tuần tự: Câu lệnh đầu tiên trong một hàm được thực thi đầu tiên, tiếp theo là câu lệnh thứ hai, v.v.

Ngôn ngữ lập trình cung cấp các cấu trúc điều khiển khác nhau cho phép thực thi những câu lệnh phức tạp. Vòng lặp là một trong những cấu trúc điều khiển đó.

Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một nhóm các câu lệnh nhiều lần và sau đây là sơ đồ tổng quát từ một câu lệnh lặp trong hầu hết các ngôn ngữ lập trình:

Sơ đồ vòng lặp trong C#

C# hỗ trợ những lệnh điều khiển sau đây:

Kiểu vòng lặp Miêu tả
Vòng lặp while Lặp lại một hoặc một nhóm các lệnh trong khi điều kiện đã cho là đúng. Nó kiểm tra điều kiện trước khi thực hiện thân vòng lặp.
Vòng lặp for Thực thi một dãy các lệnh nhiều lần và tóm tắt đoạn code mà quản lý biến vòng lặp.
Vòng lặp do...while Giống lệnh while, ngoại trừ ở điểm là nó kiểm tra điều kiện ở cuối thân vòng lặp và luôn thực hiện vòng lặp đầu tiên dù điều kiện đúng hay không.
Vòng lặp foreach Được sử dụng để duyệt lần lượt từng phần tử trong một tập hợp, mảng có sẵn..
Vòng lặp lồng nhau Bạn có thể sử dụng một hoặc nhiều vòng lặp trong các vòng lặp while, for hoặc do..while khác.

Vòng lặp while trong C#

Vòng lặp while trong C# thực hiện lặp đi lặp lại một lệnh cho đến khi nào điều kiện đã cho không còn đúng.

Cú pháp vòng lặp while trong C#

while (condition) 
{
   statement(s);
}

Theo cú pháp trên thì statement(s) có thể là lệnh đơn hoặc một khối các lệnh. condition có thể là bất kỳ biểu thức logic nào. Vòng lặp sẽ lặp đi lặp lại khi điều kiện là true.

Khi điều kiện trở thành false, chương trình điều khiển ngay lập tức chuyển tới dòng lệnh ngay sau vòng lặp.

Sơ đồ vòng lặp while trong C#

Sơ đồ vòng lặp while trong C#
Lưu ý: vòng lặp while có thể không chạy ngay từ đầu nếu kiểm tra điều kiện và kết quả là false, phần thân vòng lặp được bỏ qua và lệnh đầu tiên ngay sau vòng lặp sẽ được thực thi.

Ví dụ vòng lặp while trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 10;

         // while loop execution
         while (a < 15) 
         {
            Console.WriteLine("value of a: {0}", a);
            a++;
         }
         Console.ReadLine();
      }
   }
} 

Đây là kết quả khi biên dịch và chạy chương trình trên:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14

Vòng lặp for trong C#

Vòng lặp for trong C# là một cấu trúc điều khiển lặp đi lặp lại mà cho phép bạn viết một vòng lặp một cách hiệu quả, mà cần thực hiện trong một khoảng thời gian cụ thể nào đó.

Cú pháp vòng lặp for trong C#

for ( init; condition; increment ) 
{
   statement(s);
}

Dưới đây là miêu tả quy trình thực hiện một vòng lặp for:

  • Bước 1: Lệnh init được thực hiện đầu tiên và chỉ một lần. Bước này cho phép bạn khai báo và khởi tạo bất kỳ biến điều khiển vòng lặp nào.
  • Bước 2: condition là điều kiện của vòng lặp. Nếu điều kiện là true, phần thân vòng lặp được thực thi. Nếu nó là false, phần thân vòng lặp không được thực thi và dòng điều khiển nhảy tới lệnh tiếp theo ngay sau vòng lặp for.
  • Bước 3: thực thi các lệnh ở trong vòng lặp statement(s).
  • Bước 4: Thực thi lệnh increment. Lệnh này cho phép bạn cập nhật bất kỳ biến điều khiển vòng lặp nào rồi lặp lại bước 2.

Sơ đồ vòng lặp for trong C#

Sơ đồ vòng lặp for trong C#

Ví dụ vòng lặp for trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {         
         // for loop execution
         for (int a = 10; a < 15; a++) 
         {
            Console.WriteLine("value of a: {0}", a);
         }
         Console.ReadLine();
      }
   }
} 

Đây là kết quả khi chạy chương trình trên:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14

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

Không giống như vòng lặp forwhile - phải kiểm tra điều kiện vòng lặp ở ngay bước đầu tiên của vòng lặp, nếu thỏa mãn thì vòng lặp mới chạy. Vòng lặp do…while kiểm tra điều kiện ở cuối vòng lặp.

Điều này có nghĩa là vòng lặp do…while luôn thực hiện ít nhất một lần lặp bất kể điều kiện lặp có đúng hay không.

Cú pháp vòng lặp do…while trong C#

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

Sơ đồ vòng lặp do…while trong C#

Sơ đồ vòng lặp do while trong C#

Ví dụ vòng lặp do…while trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 10;
         
         // do loop execution
         do 
         {
            Console.WriteLine("value of a: {0}", a);
            a = a + 1;
         } while (a < 15);
         Console.ReadLine();
      }
   }
} 

Đây là kết quả trả về:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14

Vòng lặp foreach trong C#

Vòng lặp foreach được sử dụng để duyệt lần lượt từng phần tử trong một tập hợp, mảng có sẵn.

Cú pháp vòng lặp foreach trong C#

foreach (var item in collection)
{
  	// statement(s)
}

Trong đó:

  • item sẽ là từng phần tử trong tập hợp hoặc mảng.
  • collection là tập hợp hoặc mảng.
  • statement(s) là một hoặc nhiều lệnh sẽ được thực thi khi collection có phần tử hoặc chưa duyệt các phần tử trong collection.

Sơ đồ vòng lặp foreach trong C#

Sơ đồ vòng lặp foreach trong C#

Ví dụ vòng lặp foreach trong C#

using System;
namespace Samples
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = new int[5] { 1, 2, 3, 4, 5 };

            foreach (var item in array)
            {
                Console.WriteLine("value: {0}", item);
            }          

            Console.ReadLine();
        }
    }
}

Kết quả khi chạy chương trình:

value: 1
value: 2
value: 3
value: 4
value: 5

Vòng lặp lồng nhau trong C#

C# cho phép các vòng lặp lồng nhau để thực hiện các xử lý phức tạp.

Cú pháp vòng lặp lồng nhau trong C#

Cú pháp vòng lặp for lồng nhau:

for ( init1; condition1; increment1 ) 
{
   for ( init2; condition2; increment2 ) 
   {
      statement(s);
   }
   statement(s);
}

Cú pháp vòng lặp while lồng nhau:

while (condition1) 
{
   while (condition2) 
   {
      statement(s);
   }
   statement(s);
}

Cú pháp vòng lặp do...while lồng nhau:

do 
{
   statement(s);
   do 
   {
      statement(s);
   } while( condition1 );
} while( condition2 );
Lưu ý: Với vòng lặp lồng nhau thì bạn có thể đặt bất kỳ kiểu vòng lặp bên trong kiểu vòng lặp khác. Ví dụ, một vòng lặp for có thể bên trong một vòng lặp while, và ngược lại.

Ví dụ vòng lặp lồng nhau trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         for (var i = 1; i < 3; i++) 
         {
            for (var j = 5; j < 7; j++)
            {
            	Console.WriteLine("i = {0}; j = {1}, i + j = {2}", i, j, i + j);
            }
         }
         Console.ReadLine();
      }
   }
} 

Đây là kết quả:

i = 1; j = 5, i + j = 6
i = 1; j = 6, i + j = 7
i = 2; j = 5, i + j = 7
i = 2; j = 6, i + j = 8

Các lệnh điều khiển vòng lặp

Đôi khi bạn muốn thay đổi cách vòng lặp duyệt các phần tử trong danh sách. Các lệnh điều khiển vòng lặp sẽ giúp bạn làm điều này.

C# hỗ trợ các lệnh điều khiển vòng lặp sau đây:

Lệnh điều khiển Miêu tả
Lệnh break Kết thúc vòng lặp hoặc lệnh switch và chuyển sang thực thi vòng lặp hoặc lệnh switch ngay sau nó.
Lệnh continue Khi gặp lệnh này thì chương trình sẽ bỏ qua các câu lệnh ở dưới nó (trong cùng một câu lệnh lặp) để thực hiện vòng lặp mới.

Lệnh break trong C#

Lệnh break trong C# có hai cách sử dụng:

  • Khi lệnh break được sử dụng trong vòng lặp, vòng lặp ngay lập tức kết thúc và điều khiển chương trình bắt đầu lệnh tiếp theo sau vòng lặp.
  • Nó có thể được sử dụng trong lệnh switch.

Nếu bạn đang sử dụng các vòng lặp lồng nhau (ví dụ, một vòng lặp bên trong vòng lặp khác). Nếu lệnh break nằm trong vòng lặp con thì vòng lặp con ngay lập tức kết thúc và điều khiển chương trình bắt đầu lệnh tiếp theo sau vòng lặp con.

Cú pháp lệnh break trong C#

Cú pháp của lệnh break trong C# như sau:

break;

Sơ đồ lệnh break trong C#

Sơ đồ lệnh break trong C#

Ví dụ lệnh break trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 10;
         
         // while loop execution
         while (a < 20) 
         {
            Console.WriteLine("value of a: {0}", a);
            a++;
            
            if (a > 15) 
            {
               // terminate the loop using break statement
               break;
            }
         }
         Console.ReadLine();
      }
   }
} 

Đây là kết quả của chương trình trên:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15

Lệnh continue trong C#

Lệnh continue trong C# làm việc hơi giống với lệnh break. Thay vì bắt buộc kết thúc, nó bắt buộc vòng lặp tiếp theo diễn ra, bỏ qua bất kỳ đoạn code nào ở giữa.

Với vòng lặp for, lệnh continue làm cho bước kiểm tra điều kiện và phần increment của vòng lặp thực thi. Với whiledo…while, lệnh continue làm điều khiển chương trình chuyển tới các kiểm tra điều kiện.

Cú pháp lệnh continue trong C#

Cú pháp của lệnh continue trong C# như sau:

continue;

Sơ đồ lệnh continue trong C#

Sơ đồ lệnh continue trong C#

Ví dụ lệnh continue trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {
         // local variable definition
         int a = 10;
         
         // do loop execution
         do 
         {
            if (a == 15) 
            {
               // skip the iteration
               a++;
               continue;
            }
            Console.WriteLine("value of a: {0}", a);
            a++;
         } while (a < 20);
         Console.ReadLine();
      }
   }
} 

Kết quả của chương trình như sau:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19

Vòng lặp vô hạn trong C#

Một vòng lặp là vòng lặp vô hạn khi một điều kiện không bao giờ false.

Ví dụ vòng lặp vô hạn trong C#

using System;

namespace Loops 
{
   class Program 
   {
      static void Main(string[] args) 
      {
      	 // vòng lặp for không có điều kiện
         for (; ; ) 
         {
            Console.WriteLine("Hey! I am trapped");
         }
         
         // hoặc while (true)
         while (true)
         {
            Console.WriteLine("Hey! I am trapped too");
         }
      }
   }
} 

Các vòng lặp vô hạn này sẽ làm cho hệ thống gặp lỗi StackOverflowException. Do đó bạn cần phải kiểm tra kỹ các điều kiện của vòng lặp để tránh tạo ra các vòng lặp vô hạn.

Tổng kết

Bài viết đã giúp bạn có một cái nhìn tổng quát về các loại vòng lặp trong C# như for, while, do...while, foreach.

Nếu bạn có thắc mắc hay gặp bất kỳ vấn đề gì thì đừng ngần ngại để lại lời nhắn ở bên dưới nhé. Mình sẽ cố gắng trả lời sớm trong vòng 24 giờ.

Bạn có muốn xem bài viết tiếp theo không? Nó ở dưới đây nè.

Phương thức trong C# | Comdy
Một phương thức là một nhóm lệnh cùng nhau thực hiện một tác vụ. Bài viết sẽ giúp bạn định nghĩa và sử dụng phương thức trong C#.


Bài viết liên quan:

Hướng dẫn này sẽ giúp bạn tìm hiểu về đọc ghi file (File I/O) trong C# và sử dụng các lớp tiện ích để đọc ghi file.

Reflection trong C#

  • 6 min read

Reflection trong C# là gì? Ứng dụng của Reflection trong C#. Cách khai báo và sử dụng Reflection trong C#.

Attribute trong C#

  • 7 min read

Attribute trong C# là gì? Có những loại attribute nào trong C#? Làm sao để sử dụng attribute trong C#.