+4

Vòng lặp trong Java (phần 1)

Giới thiệu

Trong lập trình Java, vòng lặp (loop) là một cấu trúc quan trọng giúp thực hiện một chuỗi các câu lệnh lặp đi lặp lại một số lần hoặc cho đến khi một điều kiện cụ thể thỏa mãn. Vòng lặp giúp tối ưu hóa việc lặp lại một tập hợp các hành động, giảm sự lặp code và làm cho chương trình trở nên mạch lạc và hiệu quả hơn.

Vòng lặp sử dụng while

Vòng lặp "while" cho phép bạn thực hiện một khối code lặp đi lặp lại cho đến khi một điều kiện nào đó không còn đúng nữa.

Cấu Trúc Cơ Bản của Vòng lặp while

Vòng lặp "while" trong Java có cấu trúc cơ bản như sau:

while (điều_kiện) {
    // Mã thực thi trong vòng lặp
}
  • điều_kiện là một biểu thức logic trả về true hoặc false. Khi điều kiện là true, code bên trong vòng lặp sẽ được thực thi. Khi điều kiện trở thành false, vòng lặp kết thúc.

Ví dụ 1

Hãy xem xét một ví dụ cụ thể sử dụng vòng lặp "while". Trong ví dụ này, chúng ta sẽ in ra các số từ 1 đến 5 bằng cách sử dụng vòng lặp "while":

public class VongLapWhile {
    public static void main(String[] args) {
        int i = 1;  // Khởi tạo biến đếm
        while (i <= 5) {  // Kiểm tra điều kiện
            System.out.println("Số: " + i);
            i++;  // Tăng biến đếm lên 1
        }
    }
}

Trong ví dụ này:

  • Ta khởi tạo biến đếm i với giá trị ban đầu là 1.
  • Vòng lặp "while" kiểm tra điều kiện i <= 5. Khi điều kiện này còn đúng (1 <= 5), mã bên trong vòng lặp sẽ được thực thi.
  • Trong mỗi vòng lặp, chúng ta in ra giá trị của i và sau đó tăng giá trị của i lên 1 với i++.
  • Vòng lặp tiếp tục cho đến khi i không còn nhỏ hơn hoặc bằng 5, sau đó nó kết thúc.

Kết quả của chương trình sẽ là:

Số: 1
Số: 2
Số: 3
Số: 4
Số: 5

Ví dụ 2

Hãy tưởng tượng bạn đang xây dựng một ứng dụng quản lý thư viện và bạn muốn tạo một tính năng hiển thị danh sách các cuốn sách trong thư viện cho người dùng. Thư viện của bạn có một danh sách các cuốn sách và bạn muốn in ra từng cuốn sách trong danh sách bằng sử dụng vòng lặp "while".

Dưới đây là một ví dụ giả định sử dụng vòng lặp "while" trong một ứng dụng quản lý thư viện:

import java.util.ArrayList;

public class LibraryApp {
    public static void main(String[] args) {
        // Danh sách các cuốn sách trong thư viện
        ArrayList<String> bookList = new ArrayList<>();
        bookList.add("Cuốn sách 1");
        bookList.add("Cuốn sách 2");
        bookList.add("Cuốn sách 3");
        bookList.add("Cuốn sách 4");
        bookList.add("Cuốn sách 5");

        // In ra danh sách các cuốn sách bằng vòng lặp "while"
        int index = 0; // Khởi tạo chỉ mục đầu tiên
        while (index < bookList.size()) {
            String book = bookList.get(index);
            System.out.println("Cuốn sách: " + book);
            index++; // Tăng chỉ mục lên để di chuyển đến cuốn sách tiếp theo
        }
    }
}

Trong ví dụ này:

  • Taa có một danh sách bookList chứa tên của các cuốn sách trong thư viện.
  • Taa sử dụng vòng lặp "while" để duyệt qua danh sách cuốn sách. Ban đầu, chỉ mục (index) được khởi tạo là 0.
  • Mỗi vòng lặp, ta lấy tên của cuốn sách tại chỉ mục hiện tại, in ra màn hình, và sau đó tăng chỉ mục lên để di chuyển đến cuốn sách tiếp theo.
  • Vòng lặp tiếp tục cho đến khi chỉ mục (index) vượt quá kích thước của danh sách, khi đó nó sẽ dừng.

Kết quả của chương trình sẽ là danh sách các cuốn sách trong thư viện:

Cuốn sách: Cuốn sách 1
Cuốn sách: Cuốn sách 2
Cuốn sách: Cuốn sách 3
Cuốn sách: Cuốn sách 4
Cuốn sách: Cuốn sách 5

Ví dụ này minh họa cách sử dụng vòng lặp "while" trong một tình huống thực tế, trong đó bạn cần lặp qua một danh sách và thực hiện một hành động trên mỗi phần tử trong danh sách.

Ví dụ 3

Vòng lặp "while" có thể được sử dụng để tạo một trò chơi đoán số đơn giản. Dưới đây là một ví dụ về trò chơi đoán số sử dụng vòng lặp "while" trong Java:

import java.util.Scanner;

public class GuessNumberGame {
    public static void main(String[] args) {
        // Tạo số ngẫu nhiên từ 1 đến 100
        int targetNumber = (int) (Math.random() * 100) + 1;

        Scanner scanner = new Scanner(System.in);
        int guessedNumber;
        boolean hasGuessed = false;
        int attempts = 0;

        System.out.println("Chào mừng bạn đến với trò chơi đoán số!");
        System.out.println("Hãy đoán số từ 1 đến 100.");

        while (!hasGuessed) {
            System.out.print("Nhập số dự đoán của bạn: ");
            guessedNumber = scanner.nextInt();
            attempts++;

            if (guessedNumber == targetNumber) {
                System.out.println("Chúc mừng! Bạn đã đoán đúng số " + targetNumber + " sau " + attempts + " lần đoán.");
                hasGuessed = true;
            } else if (guessedNumber < targetNumber) {
                System.out.println("Số bạn đoán nhỏ hơn số cần đoán. Hãy thử lại.");
            } else {
                System.out.println("Số bạn đoán lớn hơn số cần đoán. Hãy thử lại.");
            }
        }

        scanner.close();
    }
}

Trong trò chơi này:

  • Một số ngẫu nhiên từ 1 đến 100 (bao gồm cả 1 và 100) được tạo để làm số mục tiêu mà người chơi cần đoán.
  • Người chơi nhập một số dự đoán và chương trình sử dụng một vòng lặp "while" để kiểm tra xem số dự đoán có trùng với số mục tiêu không.
  • Nếu số dự đoán của người chơi khớp với số mục tiêu, trò chơi kết thúc và thông báo số lần đoán cần để đoán đúng cũng được hiển thị. Nếu số dự đoán không khớp, người chơi được hướng dẫn cách thử lại và số lần đoán tăng lên.

Ví dụ này minh họa cách sử dụng vòng lặp "while" trong trò chơi đoán số, cho phép người chơi tiếp tục đoán cho đến khi họ đoán đúng.

Ví dụ 4

Vòng lặp while thường được sử dụng trong thuật toán tìm kiếm nhị phân (binary search) để tìm kiếm một giá trị trong một danh sách đã sắp xếp. Dưới đây là một ví dụ về cách sử dụng vòng lặp while trong thuật toán binary search:

public class BinarySearchExample {
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;

        while (left <= right) {
            int mid = left + (right - left) / 2;

            // Nếu giá trị tại vị trí "mid" trùng với giá trị cần tìm, trả về vị trí mid.
            if (arr[mid] == target) {
                return mid;
            }

            // Nếu giá trị tại vị trí "mid" lớn hơn giá trị cần tìm, thu gọn phạm vi tìm kiếm sang bên trái.
            if (arr[mid] > target) {
                right = mid - 1;
            }

            // Nếu giá trị tại vị trí "mid" nhỏ hơn giá trị cần tìm, thu gọn phạm vi tìm kiếm sang bên phải.
            else {
                left = mid + 1;
            }
        }

        // Nếu giá trị không tồn tại trong mảng, trả về -1.
        return -1;
    }

    public static void main(String[] args) {
        int[] array = {1, 3, 5, 7, 9, 11, 13, 15};
        int target = 7;
        int result = binarySearch(array, target);

        if (result == -1) {
            System.out.println("Không tìm thấy giá trị " + target + " trong mảng.");
        } else {
            System.out.println("Giá trị " + target + " được tìm thấy tại vị trí " + result + ".");
        }
    }
}

Trong ví dụ này, binarySearch là một phương thức tìm kiếm nhị phân và vòng lặp while được sử dụng để kiểm tra phạm vi tìm kiếm. Đầu tiên, vị trí trái (left) được đặt là 0 và vị trí phải (right) được đặt là độ dài của mảng trừ 1. Trong mỗi lần lặp, ta tính giá trị trung bình của leftright để tìm vị trí giữa (mid). Sau đó, ta so sánh giá trị tại vị trí mid với giá trị cần tìm. Nếu chúng bằng nhau, ta trả về vị trí mid. Nếu giá trị tại mid lớn hơn giá trị cần tìm, ta thực hiện thu gọn phạm vi tìm kiếm sang bên trái bằng cách cập nhật right. Ngược lại, nếu giá trị tại mid nhỏ hơn giá trị cần tìm, ta thu gọn phạm vi tìm kiếm sang bên phải bằng cách cập nhật left. Vòng lặp này tiếp tục cho đến khi left không còn nhỏ hơn hoặc bằng right.

Một số lưu ý

Khi sử dụng vòng lặp while trong Java, có một số điểm quan trọng cần lưu ý để tránh tình huống vòng lặp vô hạn hoặc vòng lặp không thực hiện. Dưới đây là một số chú ý quan trọng cùng với ví dụ minh họa:

  1. Điều kiện dừng: Hãy đảm bảo rằng bạn có một điều kiện dừng trong vòng lặp. Nếu điều kiện không bao giờ trở thành false, vòng lặp sẽ thực hiện code bên trong mãi mãi và gây ra vòng lặp vô hạn.

    int count = 0;
    while (count < 10) {
        // Mã xử lý
        count++; // Đảm bảo điều kiện dừng bằng cách tăng giá trị biến count
    }
    
  2. Cập nhật biến điều kiện: Đảm bảo rằng bạn cập nhật biến điều kiện trong vòng lặp để tiến đến điều kiện dừng. Nếu bạn không cập nhật biến, vòng lặp có thể không bao giờ dừng.

    int number = 0;
    while (number < 5) {
        // Mã xử lý
        // Quên cập nhật biến number dẫn đến vòng lặp vô hạn
    }
    
  3. Kiểm tra trước khi thực hiện: Kiểm tra điều kiện trước khi thực hiện code bên trong vòng lặp. Nếu điều kiện không được đáp ứng ngay từ đầu, vòng lặp sẽ không thực hiện khối code trong while.

    int i = 0;
    while (i > 5) {
        // Mã xử lý
        // Vòng lặp không thực hiện vì điều kiện ban đầu sai
    }
    

Lời kết

Trong bài viết này, chúng ta đã tìm hiểu về vòng lặp "while" trong ngôn ngữ lập trình Java. Vòng lặp "while" cho phép bạn lặp lại một khối code cho đến khi một điều kiện cụ thể trở thành "false." Ta đã tìm hiểu cấu trúc cơ bản của vòng lặp "while" và xem xét một số ví dụ thực tế về cách sử dụng vòng lặp "while" trong lập trình.

Ví dụ 1 minh họa cách sử dụng vòng lặp "while" để in ra các số từ 1 đến 5.

Ví dụ 2 giả định việc sử dụng vòng lặp "while" trong ứng dụng quản lý thư viện để hiển thị danh sách các cuốn sách.

Ví dụ 3 trình bày một trò chơi đoán số đơn giản sử dụng vòng lặp "while" để cho phép người chơi đoán số cho đến khi họ đoán đúng.

Ví dụ 4 minh họa cách sử dụng vòng lặp "while" trong thuật toán tìm kiếm nhị phân để tìm kiếm một giá trị trong mảng đã sắp xếp.

Cuối cùng, chúng ta đã xem xét một số lưu ý quan trọng khi sử dụng vòng lặp "while", bao gồm việc đảm bảo có điều kiện dừng, cập nhật biến điều kiện và kiểm tra điều kiện trước khi thực hiện. Việc hiểu cách sử dụng vòng lặp "while" là quan trọng để viết code chính xác và hiệu quả trong Java.


©️ Tác giả: Trần Quang Hiệp từ Viblo


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí