Trong lập trình, thường có trường hợp bạn muốn thực thi nhiều lần một tác vụ lặp lại. Vòng lặp dùng để tự động hóa các tác vụ lặp lại và tạo mã hiệu quả hơn.
Vòng lặp while và do...while trong Java dùng để thực thi khối mã miễn là điều kiện cụ thể được đáp ứng. Các vòng lặp này tương tự câu lệnh if có điều kiện - khối mã chỉ thực thi nếu điều kiện cụ thể đánh giá thành true. Khác với câu lệnh if, vòng lặp while chạy cho đến khi điều kiện không còn true.
Hướng dẫn này sẽ thảo luận cơ bản về câu lệnh while và do...while trong Java, và đi qua vài ví dụ minh họa các câu lệnh này trong chương trình Java.
Vòng Lặp While Trong Java
Vòng lặp while lặp qua khối mã miễn là điều kiện chỉ định đánh giá thành true. Cú pháp vòng lặp while tương tự câu lệnh if truyền thống. Cú pháp vòng lặp while trong Java:
while (condition_is_met) { // Code to execute }
Vòng lặp while sẽ kiểm tra biểu thức trong ngoặc. Nếu biểu thức boolean đánh giá thành true, thân vòng lặp sẽ thực thi, sau đó biểu thức được đánh giá lại. Chương trình tiếp tục quá trình này cho đến khi biểu thức đánh giá thành false, sau đó vòng lặp while dừng, và phần còn lại của chương trình chạy.
Hãy đi qua ví dụ minh họa cách dùng vòng lặp while trong Java. Giả sử chúng ta là thợ mộc quyết định bán bàn mới trong cửa hàng. Chúng ta chỉ có năng lực làm năm bàn, sau đó người muốn mua bàn sẽ được đưa vào danh sách chờ.
Chúng ta muốn tạo chương trình cho biết thêm bao nhiêu người có thể đặt bàn trước khi phải đưa vào danh sách chờ. Có thể dùng vòng lặp while như sau, sẽ thực thi thân vòng lặp cho đến khi số đơn đặt không còn nhỏ hơn giới hạn:
int limit = 5; int orders_made = 0; while (orders_made < limit) { orders_made++; int capacity = limit - orders_made; String message = capacity + "more tables can be ordered."; System.out.println(message); }
Mã trả về:
4 more tables can be ordered. 3 more tables can be ordered. 2 more tables can be ordered. 1 more tables can be ordered. 0 more tables can be ordered.
Phân tích mã: Dòng đầu, khai báo biến limit theo dõi số bàn tối đa có thể làm. Sau đó khai báo biến orders_made lưu số đơn đặt.
Chương trình thực thi vòng lặp while, chạy trong khi orders_made nhỏ hơn limit. Sau đó dùng toán tử tăng orders_made++ cộng 1 vào orders_made.
Sau khi toán tử tăng thực thi, chương trình tính dung lượng bàn còn lại bằng cách trừ orders_made từ limit. Sau đó in thông báo [capacity] more tables can be ordered. ra bảng điều khiển.
Câu lệnh while dừng khi orders_made lớn hơn limit.
Vòng Lặp Do While Trong Java
Vòng lặp do...while là loại vòng lặp while. Vòng lặp do...while thực thi khối mã trong khối do một lần trước khi kiểm tra điều kiện có đánh giá thành true. Sau đó chương trình lặp lại miễn là điều kiện true.
Khác biệt giữa while và do...while là: while đánh giá điều kiện trước chạy mã trong khối while, trong khi do...while đánh giá điều kiện sau chạy mã trong khối do.
Cú pháp vòng lặp do...while:
do { // Code to execute } while (condition_is_met);
Hãy dùng ví dụ giải thích cách vòng lặp do...while hoạt động.
Giả sử chúng ta tạo trò chơi đoán số yêu cầu người dùng đoán số từ 1 đến 10. Chúng ta muốn người dùng nhập số trước, rồi mới kiểm tra xem họ đoán đúng chưa. Nếu nhập sai, họ được nhắc thử lại. Có thể thực hiện bằng vòng lặp do...while.
Dưới đây là ví dụ chương trình yêu cầu người dùng đoán số, sau đó đánh giá xem người dùng đoán đúng hay không dùng vòng lặp do...while:
import java.util.Scanner; class GuessingGame { public static void main(String[] args) { int number = 8; int guess = 0; Scanner input = new Scanner(System.in); do { System.out.print("Enter a number between 1 and 10: "); guess = input.nextInt(); } while (number != guess); System.out.println("You're correct!"); } }
Khi chạy mã, chúng ta được yêu cầu đoán số trước, trước khi điều kiện trong vòng lặp do...while được đánh giá. Đây là chuyện gì xảy ra khi thử đoán vài số trước khi đoán đúng:
Enter a number between 1 and 10: 9 Enter a number between 1 and 10: 1 Enter a number between 1 and 10: 4 Enter a number between 1 and 10: 5 Enter a number between 1 and 10: 8 You're correct!
Phân tích mã: Đầu tiên nhập phương thức util.Scanner dùng thu thập đầu vào người dùng. Sau đó định nghĩa lớp GuessingGame chứa mã.
Định nghĩa hai biến: number lưu số cần đoán, và guess lưu đoán của người dùng.
Sau đó dùng phương thức Scanner khởi tạo đầu vào người dùng. In thông báo Enter a number between 1 and 10: ra bảng điều khiển, rồi dùng input.nextInt() lấy số người dùng nhập.
Sau khi mã này thực thi, vòng lặp do...while đánh giá xem số người dùng đoán có bằng số cần đoán không. Nếu đoán sai, nội dung khối do chạy lại; nếu đoán đúng, vòng lặp do...while dừng và thông báo You’re correct! in ra bảng điều khiển.
Vòng Lặp Vô Hạn
Vòng lặp vô hạn là vòng lặp chạy mãi mãi. Nếu vòng lặp while có câu lệnh không bao giờ đánh giá thành false, vòng lặp sẽ tiếp tục và có thể làm sập chương trình. Vì vậy, quan trọng phải đảm bảo vòng lặp while sẽ dừng tại thời điểm nào đó.
Ví dụ về vòng lặp vô hạn trong Java:
while (true) { // Code to execute }
Vòng lặp này chạy vô hạn. Tuy nhiên, chúng ta có thể dừng chương trình bằng câu lệnh break. Giả sử tạo chương trình theo dõi số bàn còn trong kho. Chỉ có năm bàn trong kho. Khi không còn bàn, muốn vòng lặp while dừng. Có thể tạo chương trình đáp ứng yêu cầu bằng mã sau:
Boolean tables_in_stock = true; int orders_made = 0; while (tables_in_stock) { orders_made++; if (orders_made == 5) { System.out.println("We are out of stock."); break; } else { int tables_left = 5 - orders_made; String message = "There are " + tables_left + " tables in stock."; System.out.println(message); } }
Khi chạy mã, phản hồi sau được trả về:
There are 4 tables in stock. There are 3 tables in stock. There are 2 tables in stock. There are 1 tables in stock. We are out of stock.
Trong ví dụ, vòng lặp while tiếp tục thực thi miễn là tables_in_stock là true. Nhưng chúng ta không chỉ định cách tables_in_stock có thể thành false.
Vì vậy, trong mã dùng câu lệnh break thực thi khi orders_made bằng 5.
Điều này có nghĩa khi chưa đến năm đơn đặt, thông báo in ra There are [tables_left] tables in stock. Nhưng khi orders_made bằng 5, thông báo We are out of stock. in ra bảng điều khiển, và câu lệnh break thực thi. Khi break chạy, câu lệnh while dừng.
Kết Luận
Vòng lặp while trong Java thực thi khối mã cụ thể trong khi câu lệnh true, và dừng khi câu lệnh false. Vòng lặp do...while thực thi khối mã trước, sau đó đánh giá câu lệnh xem vòng lặp có tiếp tục không.
Hướng dẫn này đã thảo luận cách dùng cả vòng lặp while và do...while trong Java. Chúng ta cũng nói về vòng lặp vô hạn và đi qua ví dụ của từng phương pháp trong chương trình Java. Bạn đã trang bị kiến thức cần thiết để viết vòng lặp while và do...while trong Java như chuyên gia!