Bây giờ hãy xem các ví dụ Do While...Loop và Do Until...Loop. Chúng sử dụng biểu thức lô gíc điều kiện. Các biểu thức này không phụ thuộc trực tiếp biến đếm lặp. Ví dụ Do While...Loop thứ nhất với biểu thức lô gíc điều kiện được dùng để kiểm tra xem giá trị của biến có còn lớn hơn hoặc bằng 0 không. Khi giá trị của biến nhỏ hơn không thì vòng lặp kết thúc.
Tạo một ứng dụng Window tên là LoopsInAction. Thêm một nút lệnh vào Form1. Thay đổi thuộc tính Text của Button1 thành "Đếm Lùi". Nhấp đúp vào Button1 để soạn thảo mã lệnh cho sự kiện nhấn nút của nó như sau:
Dim LoopIndex As Integer = 0
Dim WhileController As Integer = 167
Do While (WhileController >= 0)
LoopIndex = LoopIndex + 1
WhileController = WhileController - (23 * LoopIndex)
Loop
MessageBox.Show(WhileController)
Dịch và chạy chương trình LoopsInAction. Nhấn vào nút "Đếm Lùi". Hộp thông báo xuất hiện và hiển thị -63. Mã lệnh này làm việc như thế nào? Chúng ta khai báo hai biến nguyên, LoopIndex và WhileController, và khởi tạo các giá trị ban đầu cho chúng. Sau mỗi lần vòng
lặp được thực hiện Biến LoopIndex được tăng lên 1, một giá trị mới của biến WhileController được tính toán bằng cách sử dụng một biểu thức phức tạp một chút. Giá trị mới của WhileController được tính bằng cách lấy giá trị cũ của WhileController trừ đi giá trị của LoopIndex nhân với 23. Vì thế sau mỗi lần lặp giá trị của WhileController càng ngày càng nhỏ đi. Sẽ rất là khó mà đoán được vòng lặp sẽ thực hiện bao nhiêu lần trước khi giá trị của biến WhileController nhỏ hơn 0 và vòng lặp kết thúc. Nhưng điều này thực sự không cần thiết, Vì biểu thức lô gíc điều kiện điều khiển vòng lặp chỉ quan tâm đến giá trị của biến WhileController và không quan tâm đến giá trị của LoopIndex.
Ví dụ Do While...Loop thứ hai với biểu thức lô gíc phụ thuộc vào việc nút lựa chọn RadioButton3 có được chọn hay không. Mỗi lần lặp là một nút lựa chọn được kiểm tra.
Trong ứng dụng LoopsInAction, thêm một nút lệnh thứ hai vào Form1. Thay đổi thuộc tính Text của Button2 thành "While". Thêm ba nút lựa chọn vào Form1. Nhấp đúp vào Button2 để soạn thảo mã lệnh cho sự kiện nhấn nút của nó như sau:
Dim LoopIndex As Integer = 0 RadioButton1.Checked = True
Do While (RadioButton3.Checked = False)
LoopIndex = LoopIndex + 1 If LoopIndex = 1 Then
RadioButton1.Checked = True
ElseIf LoopIndex = 2 Then
RadioButton2.Checked = True
ElseIf LoopIndex = 3 Then
RadioButton3.Checked = True
End If
Loop
MessageBox.Show(LoopIndex)
Dịch và chạy chương trình. Để ý rằng RadioButton1 được chọn. Nhấn nút "While". RadioButton3 được chọn bằng mã lệnh và hộp thông báo hiển thị chỉ số vòng lặp. Nếu mắt bạn đủ nhanh, hoặc bạn sử dụng một máy tính thực sự chậm, bạn có thể nhìn thấy RadioButton2 được chọn trong giây lát khi vòng lặp thực hiện.
Cái gì đang xảy ra ở đây. Chúng ta khai báo biến LoopIndex để giám sát số lần lặp được thực hiện. Tuy nhiên, chúng ta không sử dụng biến LoopIndex trong biểu thức lô gíc điều kiện (biểu thức điều khiển lệnh Do While...Loop). Mà chúng ta sử dụng biến LoopIndex làm điều kiện để chọn nút lựa chọn trong mỗi lần lặp. Biểu thức điều kiện của lệnh Do While...Loop kiểm tra xem nút lựa chọn RadioButton3 đã được chọn chưa. Vòng lặp kết thúc ngay sau khi nút RadioButton3 được chọn (RadioButton3.Checked=True).
Ví dụ Do Until...Loop thứ ba. Biểu thức lô gíc điều kiện so sánh thuộc tính Text của Textbox với biến chuỗi, giá trị của biến này thay đổi theo từng lần lặp. Thêm hộp văn bản vào Form1 của ứng dụng ActionLoops. Giữ nguyên giá trị của thuộc tính Text của TextBox1 là "TextBox1". Thêm nút lệnh thứ ba vào Form1 và thay đổi thuộc tính Text của nó thành "TextMatch". Nhấp đúp vào Button3 để soạn thảo mã lệnh cho sự kiện nhấn nút của nó:
Dim MatchText As String = ""
Dim LoopIndex As Integer = 0
Do Until (MatchText = TextBox1.Text)
LoopIndex = LoopIndex + 1 If LoopIndex = 2 Then MatchText = "Text" End If If LoopIndex = 3 Then MatchText = "Box1" End If If LoopIndex = 4 Then MatchText = "TextBox1" End If Loop
MessageBox.Show("Sau " & LoopIndex & " lần lặp
đã khớp.")
Dịch và chạy chương trình. Nhấn nút "Text Match". Hộp thông báo xuất hiện và hiển thị giá trị LoopIndex khi chuỗi văn bản so khớp với nhau.
Trong lệnh Do Until...Loop này. Biến LoopIndex chỉ được dùng để xác định giá trị của biến MatchText. Biểu thức điều kiện so sánh giá trị của MatchText với thuộc tính Text của TextBox1. Ở lần lặp thứ tư giá trị của biến LoopIndex là 4 và MatchText="TextBox1". Biểu thức lô gíc điều kiện trở thành đúng (vì "TextBox1"="TextBox1"), vòng lặp kết thúc.
Điều gì sẽ xảy ra nếu thuộc tính Text của TextBox1 được đặt thành một chuỗi ký tự khác. Bạn có thể thêm lệnh "If..Then" khác để cho mã lệnh vẫn tiếp tục được thực hiện không?