25 tháng 3, 2020

Vòng lặp While trong C#

Trong bài viết trước mình đã giới thiệu sơ lược về cấu trúc lặp và chúng ta đã cùng tìm hiểu về vòng lặp for. Nay trong bài viết này chúng ta cùng tìm hiểu về vòng lặp while nhé.

While trong C#

Đối với vòng lặp for chúng ta có thể biết trước được số lần lặp nhưng để giải quyết vấn đề mà không biết trước được số lần lặp thì vòng lặp while sẽ giải quyết được.

Cấu trúc vòng lặp while trong C#

Cú pháp
while (biểu thức điều kiện)
{
        <Khối lệnh thực hiện>
}

- Biểu thức điều kiện là điều kiện để các lệnh được thực hiện, biểu thức này bắt buộc phải trả về giá trị true hoặc false
- Nếu trong while có nhiều câu lệnh được thực hiện thì phải để nó trong khối ngoặc nhọn { }

Sơ đồ cấu trúc vòng lặp while
Nhìn vào sơ đồ trên ta sẽ thấy nếu điều kiện đúng thì thực hiện khối lệnh. Sau đó quay trở lại kiểm tra điều kiện, nếu đúng thì lại thực hiện khối lệnh, nếu sai thì thoát khỏi vòng lặp.
Điều này đồng nghĩ với việc nếu điều kiện luôn đúng thì chương trình sẽ lặp vô tận.

Lưu ý
- Để thoát khỏi tình trạng lặp vô hạn, gây ra hiện tượng treo máy thì chúng ta cần có lệnh làm thay đổi giá trị của biểu thức, để đảm bảo rằng sau một số lần lặp nhất định thì biểu thức điều kiện sẽ trả về giá trị false và kết thúc vòng lặp. Nếu trong thân vòng lặp không có lệnh làm thay đổi giá trị biểu thức thì ta cần có từ khóa break để thoát khỏi vòng lặp. 
- Điều kiện lặp luôn bằng false thì vòng lặp sẽ không được thực thi.

Ví dụ 1: Gõ chương trình yêu cầu người dùng nhập vào 1 số nguyên nằm trong khoảng từ 1 đến 100. Nếu sai thì hiện thông báo và yêu cầu nhập lại.
Trong ví dụ này, chúng ta không hề biết người dùng nhập sai bao nhiêu lần, tức nghĩa là không thể biết vòng lặp sẽ lặp lại bao nhiêu lần.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace vong_lap_while
{
    class Program
    {
        static void Main(string[] args)
        {
            int x;

            Console.Write("nhap vao so nguyen tu 1 den 100: ");
            x = int.Parse(Console.ReadLine());
            while ((x <= 0) || (x > 100))
            {
                Console.WriteLine("xin loi {0} khong nam trong khoang tu 1 den 100", x);
                Console.Write("moi ban nhap lai: ");
                x = int.Parse(Console.ReadLine());
            }
            Console.WriteLine("so ban vua nhap la: " + x);
            Console.ReadKey();
        }
    }
}

Kết quả: 

Ví dụ 2: In ra màn hình ma trận gồm 9 hàng, 9 cột. Mỗi hàng là một dãy số tự nhiên từ 1 đến 9.
int countRow = 1;
int countCol = 1;
int maxRow = 9;
int maxCol = 9;

while (countRow <= maxRow)
{
      while (countCol <= maxCol)
      {
           Console.Write("{0,2}", countCol);
           countCol++;
      }
      countCol = 1;  //Reset lại giá trị số cột
      countRow++;
      Console.WriteLine();
}

Kết quả:

Lưu ý: Sau mỗi vòng lặp cho cột thì bạn phải reset lại giá trị countCol vì lúc đó số cột đang lớn hơn max cột. Nếu bạn không reset lại số cột thì sau hàng thứ nhất được in ra, lúc này số cột là 10. Sang hàng thứ 2 thì chương trình sẽ không in số cột ra nữa vì số cột lúc này không thỏa mãn điều kiện lặp. 

SHARE THIS

Blogger Nguyễn Dương

Có một câu nói mà mình rất thích đó là "Thật sai lầm khi nghĩ rằng một khi rời khỏi trường học, bạn không cần học thêm điều mới nữa". Chính vì thế mà hãy luôn luôn học hỏi, con người chỉ ngừng phát triển khi ngừng học hỏi. Nếu như bạn chưa hiểu nội dung bài viết hoặc đang khúc mắc khi thao tác thì hãy bình luận phía dưới bài viết để mọi người cùng thảo luận nhé!