NỘI DUNG BÀI VIẾT
Câu lệnh lặp
Vòng lặp là dạng trúc cho phép tự động thực hiện một khối lệnh lặp đi lặp lại nhiều lần dựa vào một điều kiện cho trước. Vòng lặp giúp cho lập trình viên viết được các mã nguồn ngắn gọn hơn so với việc phải viết lặp lại những dòng mã tương tự nhau.
Chẳng hạn, trong thực tế chúng ta có thể sử dụng vòng lặp để hiển thị danh sách khách hàng trong một ứng dụng bán hàng trực tuyến; hoặc hiển thị danh sách bạn bè trong một ứng dụng mạng xã hội; hoặc để tạo hiệu ứng chuyển động của nhân vật trong một trò chơi; hoặc để sao chép một file lớn từ nơi này sang nơi khác.
Ở phần trước chúng ta đã tìm hiểu về các câu lệnh điều kiện. Đặc trưng của các câu lệnh này là dựa trên một điều kiện cho trước, luồng thực thi của chương trình sẽ rẽ nhánh sang các khối lệnh khác nhau.
Quan sát lưu đồ sau đây:
Trong lưu đồ trên, chừng nào “condition” của chúng ta còn “đúng”, “statement block” của chúng ta sẽ còn được thực thi lại mãi. Chúng ta gọi đây là phép lặp.
Nhờ có phép lặp, chúng ta có khả năng cho thực thi một khối mã nhiều lần mà không cần phải viết lại, giúp chương trình ngắn hơn, dễ đọc hơn, và quan trọng nhất, “rõ ý” hơn.
Vòng lặp while
Câu lệnh lặp while chính là câu lệnh được mô tả bởi lưu đồ ở trên, cú pháp của câu lệnh này như sau:
while (loop-continuation-condition) { // statement(s)}
Trong cú pháp trên, param là một biểu thức có giá trị boolean. Quá trình thực thi sẽ bắt đầu bằng việc tính toán và đánh giá biểu thức loop-continuation-condition (điều kiện tiếp diễn vòng lặp). Nếu biểu thức điều kiện có giá trị là true, các câu lệnh trong thân vòng lặp sẽ được thực thi. Sau khi các câu lệnh trong thân vòng lặp thực thi xong, quá trình đánh giá sẽ được thực hiện lại, và thân vòng lặp sẽ được thực thi hết lần này đến lần khác chừng nào param vẫn còn true. Do đó câu lệnh này mới có tên như hiện tại (while trong tiếng Anh nghĩa là “chừng nào”).
Sau đây là một ví dụ:
Scanner sc = new Scanner(System.in);System.out.println("Không đúng! Mời bạn nhập lại mật khẩu: ");String password = sc.nextLine();while (password != "vung oi mo ra") { System.out.println("Không đúng! Mời bạn nhập lại mật khẩu: "); password = sc.nextLine();}
Đoạn mã trên sẽ hỏi lại mật khẩu chừng nào người dùng vẫn còn chưa cung cấp mật khẩu đúng.
Bạn thử tự trả lời câu hỏi sau: “Chuyện gì xảy ra nếu người dùng nhập mật khẩu đúng ngay từ lần đầu tiên?”
Tham khảo khoá học lập trình wrb trong vòng 6 tháng, đảm bảo công việc đầu ra 100%!
Vòng lặp do-while
Câu lệnh lặp do-while có cấu trúc như sau:
do { // statement(s)} while (loop-continuation-condition);
Để ý rằng câu lệnh do-while kết thúc không phải bởi dấu ngoặc móc, do đó theo quy ước chúng ta đặt dấu chấm phẩy để kết thúc câu lệnh.
Cấu trúc và cách thực thi của câu lệnh do-while rất giống với câu lệnh while, ngoại trừ cách bắt đầu vòng lặp đầu tiên. Trong khi lệnh while tính toán và đánh giá biểu thức điều kiện trước rồi mới bắt đầu khối lệnh trong thân, thì lệnh do-while thực thi khối lệnh trong thân trước, sau đó mới tiến hành tính toán và đánh giá. Hệ quả của việc này là thân câu lệnh chắc chắn được thực thi ít nhất một lần, dù cho biểu thức điều kiện là đúng hay sai.
Về mặt lý thuyết, mọi trường hợp cần dùng tới câu lệnh while thì chúng ta đều có thể chuyển đổi sang sử dụng câu lệnh do-while và ngược lại. Tuy nhiên thực tế cho thấy với mỗi trường hợp, thường có một vòng lặp giúp chúng ta viết mã đẹp hơn trường hợp còn lại.
Chẳng hạn:
Scanner sc = new Scanner(System.in);String password;do { password = sc.nextLine();} while (password != "vung oi mo ra");