Bài 5/7
Vòng lặp
5 phút đọc
In bảng giá cho 1 đến 10 sản phẩm, hay nhắc khách nhập lại cho tới khi nhập đúng: đó là những việc lặp đi lặp lại. Thay vì viết một câu lệnh mười lần, bạn dùng vòng lặp.
Khái niệm
🔁 Vòng lặp (loop): khối code được chạy lặp lại nhiều lần cho tới khi điều kiện dừng thành sai.
🔢 for: vòng lặp dùng khi biết trước số lần lặp, có sẵn biến đếm.
⏳ while: vòng lặp dùng khi chỉ biết điều kiện dừng, không biết trước số lần lặp.
Ví dụ
decimal price = 5000m;
for (int i = 1; i <= 3; i++)
{
Console.WriteLine(i + " cái: " + price * i);
}1 cái: 5000
2 cái: 10000
3 cái: 15000Dòng for có ba phần, cách nhau bằng dấu ;:
int i = 1: khởi tạo biến đếm, chạy một lần lúc bắt đầu.i <= 3: điều kiện, còn đúng thì còn lặp.i++: tăngithêm 1 sau mỗi vòng (i--thì giảm 1).
while và break
while chỉ có điều kiện. Vòng lặp chạy mãi cho tới khi điều kiện sai:
int stock = 10;
int orders = 0;
while (stock >= 3)
{
stock = stock - 3;
orders++;
}
Console.WriteLine(orders); // 3
Console.WriteLine(stock); // 1break thoát khỏi vòng lặp ngay lập tức, kể cả khi điều kiện vẫn đúng.
Thử ngay
Dán vào Program.cs rồi chạy dotnet run:
for (int i = 1; i <= 10; i++)
{
if (i == 4)
{
break;
}
Console.WriteLine("Đơn số " + i);
}Đoán trước khi chạy: màn hình in ra bao nhiêu dòng?
Xem kết quả
Đơn số 1
Đơn số 2
Đơn số 3Ba dòng. Khi i bằng 4, break thoát vòng lặp trước khi kịp in.
Lỗi hay gặp
Vòng lặp vô tận. Quên thay đổi biến trong điều kiện, nên điều kiện đúng mãi và chương trình treo.
// SAI — stock không bao giờ giảm
int stock = 10;
while (stock > 0)
{
Console.WriteLine("Bán 1 cái");
}// ĐÚNG
int stock = 10;
while (stock > 0)
{
Console.WriteLine("Bán 1 cái");
stock--;
}Lệch một vòng. < và <= khác nhau đúng một lần lặp.
// SAI — muốn in 1 đến 5 nhưng chỉ ra 1 đến 4
for (int i = 1; i < 5; i++)
{
Console.WriteLine(i);
}// ĐÚNG
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}Tóm tắt
- Biết trước số lần lặp thì dùng
for, chỉ biết điều kiện dừng thì dùngwhile. for (khởi tạo; điều kiện; bước tăng).breakthoát vòng lặp ngay.- Luôn kiểm tra: biến trong điều kiện có thay đổi không, và dùng
<hay<=.
Tự kiểm tra
0/3 câufor (int i = 0; i < 3; i++) Console.WriteLine(i); In ra những số nào?
Chương trình cần hỏi mật khẩu cho tới khi người dùng nhập đúng. Vòng lặp nào phù hợp?
int n = 5; while (n > 0) { Console.WriteLine(n); } Chuyện gì xảy ra?