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 ✅
-
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;
}
} -
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);
} -
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 ⚠️
-
Break Sai Vị Trí
// Lỗi
if (condition) {
break; // Lỗi: break ngoài vòng lặp
}
// Đúng
while (true) {
if (condition) {
break;
}
} -
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
}
} -
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