Skip to main content

Break và Continue trong Java 🎯

🎯 Mục tiêu: Học cách sử dụng break và continue để kiểm soát luồng thực thi trong các vòng lặp Java.

Giới thiệu 📝

Break và continue là hai từ khóa quan trọng trong Java được sử dụng để kiểm soát luồng thực thi trong các vòng lặp. Break dùng để thoát hoàn toàn khỏi vòng lặp, trong khi continue dùng để bỏ qua phần còn lại của lần lặp hiện tại và chuyển sang lần lặp tiếp theo.

💡 Fun Fact: Break và continue giúp code của bạn linh hoạt hơn bằng cách cho phép bạn kiểm soát chính xác khi nào muốn thoát vòng lặp hoặc bỏ qua một số bước trong vòng lặp.

1. Từ Khóa Break ⚡

Break Cơ Bản

for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // Thoát vòng lặp khi i = 5
}
System.out.println(i);
}

Break Trong Vòng Lặp Lồng Nhau

for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break; // Thoát vòng lặp j
}
System.out.println("i=" + i + ", j=" + j);
}
}

Break Với Label

outer: for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == 1 && j == 1) {
break outer; // Thoát cả hai vòng lặp
}
System.out.println("i=" + i + ", j=" + j);
}
}

2. Từ Khóa Continue 🔄

Continue Cơ Bản

for (int i = 0; i < 5; i++) {
if (i == 2) {
continue; // Bỏ qua lần lặp khi i = 2
}
System.out.println(i);
}

Continue Trong Vòng Lặp While

int i = 0;
while (i < 5) {
i++;
if (i == 3) {
continue; // Bỏ qua lần lặp khi i = 3
}
System.out.println(i);
}

Continue Trong Vòng Lặp Do-While

int i = 0;
do {
i++;
if (i == 3) {
continue; // Bỏ qua lần lặp khi i = 3
}
System.out.println(i);
} while (i < 5);

3. Ví Dụ Thực Tế 🚀

Tìm Số Nguyên Tố Đầu Tiên

public class PrimeFinder {
public static void main(String[] args) {
int number = 100;
boolean isPrime = true;

for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
isPrime = false;
break; // Thoát vòng lặp khi tìm thấy ước số
}
}

if (isPrime) {
System.out.println(number + " là số nguyên tố");
} else {
System.out.println(number + " không phải là số nguyên tố");
}
}
}

Xử Lý Danh Sách Sản Phẩm

public class ProductProcessor {
public static void main(String[] args) {
ArrayList<Product> products = new ArrayList<>();
products.add(new Product("Laptop", 1000));
products.add(new Product("Phone", 500));
products.add(new Product("Tablet", 300));

for (Product product : products) {
if (product.getPrice() < 0) {
continue; // Bỏ qua sản phẩm có giá âm
}

if (product.getPrice() > 1000) {
break; // Dừng xử lý khi gặp sản phẩm có giá > 1000
}

System.out.println("Xử lý sản phẩm: " + product.getName());
}
}
}

Xử Lý File Với Break

public class FileProcessor {
public static void main(String[] args) {
try {
File file = new File("data.txt");
Scanner scanner = new Scanner(file);

while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("END")) {
break; // Dừng đọc file khi gặp dòng bắt đầu bằng "END"
}
System.out.println(line);
}

scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Không tìm thấy file!");
}
}
}

Xử Lý Dữ Liệu Với Continue

public class DataProcessor {
public static void main(String[] args) {
int[] numbers = {1, -2, 3, 4, -5, 6, 7, 8, 9, 10};
int sum = 0;

for (int number : numbers) {
if (number < 0) {
continue; // Bỏ qua số âm
}
sum += number;
}

System.out.println("Tổng các số dương: " + sum);
}
}

Tìm Kiếm Trong Mảng Nhiều Chiều

public class MatrixSearcher {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

int target = 5;
boolean found = false;

outer: for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] == target) {
found = true;
break outer; // Thoát cả hai vòng lặp khi tìm thấy
}
}
}

if (found) {
System.out.println("Tìm thấy số " + target);
} else {
System.out.println("Không tìm thấy số " + target);
}
}
}

4. Best Practices ✅

  1. Sử Dụng Break Khi Cần Thoát Hoàn Toàn

    // Không nên
    for (int i = 0; i < 10; i++) {
    if (i == 5) {
    i = 10; // Không nên dùng cách này
    }
    }

    // Nên
    for (int i = 0; i < 10; i++) {
    if (i == 5) {
    break;
    }
    }
  2. Sử Dụng Continue Khi Cần Bỏ Qua

    // Không nên
    for (int i = 0; i < 5; i++) {
    if (i != 2) {
    System.out.println(i);
    }
    }

    // Nên
    for (int i = 0; i < 5; i++) {
    if (i == 2) {
    continue;
    }
    System.out.println(i);
    }
  3. Sử Dụng Label Khi Cần

    // Không nên
    boolean found = false;
    for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
    if (i == 1 && j == 1) {
    found = true;
    break;
    }
    }
    if (found) break;
    }

    // Nên
    outer: for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
    if (i == 1 && j == 1) {
    break outer;
    }
    }
    }

5. Lỗi Thường Gặp ⚠️

  1. Break Sai Vị Trí

    // Lỗi
    if (condition) {
    break; // Lỗi: break ngoài vòng lặp
    }

    // Đúng
    while (true) {
    if (condition) {
    break;
    }
    }
  2. Continue Trong Switch

    // Lỗi
    switch (value) {
    case 1:
    continue; // Lỗi: continue trong switch
    }

    // Đúng
    for (int i = 0; i < 5; i++) {
    switch (value) {
    case 1:
    continue; // Đúng: continue trong vòng lặp
    }
    }
  3. Label Không Đúng

    // Lỗi
    label: {
    break label; // Lỗi: break label không trong vòng lặp
    }

    // Đúng
    label: for (int i = 0; i < 5; i++) {
    break label;
    }

💡 Lời khuyên: Hãy thực hành với các ví dụ thực tế để hiểu rõ hơn về cách sử dụng break và continue trong các tình huống khác nhau.

Tiếp Theo 🎯

Trong các bài học tiếp theo, chúng ta sẽ:

  • Tìm hiểu về vòng lặp for
  • Học cách sử dụng vòng lặp while
  • Thực hành với các ví dụ thực tế
  • Tìm hiểu về vòng lặp do-while