Chuyển tới nội dung chính

Vòng Lặp For trong Java 🔄

🎯 Mục tiêu: Học cách sử dụng vòng lặp for để thực hiện các tác vụ lặp lại một cách hiệu quả trong Java.

Giới thiệu 📝

Vòng lặp for là một trong những cấu trúc điều khiển cơ bản trong Java, được sử dụng khi bạn biết chính xác số lần lặp cần thực hiện. Nó giúp code của bạn ngắn gọn và dễ bảo trì hơn.

💡 Fun Fact: Vòng lặp for được sử dụng rộng rãi trong lập trình vì nó cho phép chúng ta thực hiện các tác vụ lặp lại một cách chính xác và hiệu quả.

1. Cú Pháp Cơ Bản ⚡

Vòng Lặp For Đơn Giản

for (int i = 0; i < 5; i++) {
System.out.println("Lần lặp thứ " + i);
}

Các Thành Phần

  1. Khởi tạo: int i = 0 - Thiết lập giá trị ban đầu
  2. Điều kiện: i < 5 - Kiểm tra điều kiện trước mỗi lần lặp
  3. Tăng/giảm: i++ - Cập nhật giá trị sau mỗi lần lặp

2. Các Biến Thể Của Vòng Lặp For 🔄

Vòng Lặp For Với Nhiều Biến

for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println("i = " + i + ", j = " + j);
}

Vòng Lặp For Vô Hạn

for (;;) {
// Code vô hạn
break; // Thoát vòng lặp
}

Vòng Lặp For Với Biến Ngoài

int i;
for (i = 0; i < 5; i++) {
System.out.println(i);
}

3. Vòng Lặp For Với Mảng 📦

Duyệt Mảng Một Chiều

int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}

Duyệt Mảng Nhiều Chiều

int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}

4. Vòng Lặp For-Each 🎯

Cú Pháp

for (KiểuDữLiệu biến : mảng_hoặc_collection) {
// Xử lý biến
}

Ví Dụ Với Mảng

String[] fruits = {"Apple", "Banana", "Orange"};
for (String fruit : fruits) {
System.out.println(fruit);
}

Ví Dụ Với ArrayList

ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
names.add("Bob");

for (String name : names) {
System.out.println(name);
}

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

Tính Tổng Dãy Số

public class SumCalculator {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("Tổng từ 1 đến 100: " + sum);
}
}

Tìm Số Nguyên Tố

public class PrimeFinder {
public static void main(String[] args) {
int n = 100;
System.out.println("Các số nguyên tố từ 1 đến " + n + ":");

for (int i = 1; i <= n; i++) {
boolean isPrime = true;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
System.out.print(i + " ");
}
}
}
}

In Bảng Cửu Chương

public class MultiplicationTable {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
System.out.println("Bảng cửu chương " + i + ":");
for (int j = 1; j <= 10; j++) {
System.out.printf("%d x %d = %d%n", i, j, i * j);
}
System.out.println();
}
}
}

Quản Lý Danh Sách Sản Phẩm

public class ProductManager {
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));

// Tính tổng giá trị sản phẩm
double totalValue = 0;
for (Product product : products) {
totalValue += product.getPrice();
}
System.out.println("Tổng giá trị sản phẩm: $" + totalValue);

// Tìm sản phẩm có giá cao nhất
Product maxProduct = products.get(0);
for (Product product : products) {
if (product.getPrice() > maxProduct.getPrice()) {
maxProduct = product;
}
}
System.out.println("Sản phẩm đắt nhất: " + maxProduct.getName());
}
}

Xử Lý Dữ Liệu Thời Tiết

public class WeatherAnalyzer {
public static void main(String[] args) {
double[] temperatures = {25.5, 26.0, 24.8, 27.2, 26.5};

// Tính nhiệt độ trung bình
double sum = 0;
for (double temp : temperatures) {
sum += temp;
}
double average = sum / temperatures.length;
System.out.println("Nhiệt độ trung bình: " + average);

// Tìm nhiệt độ cao nhất
double maxTemp = temperatures[0];
for (double temp : temperatures) {
if (temp > maxTemp) {
maxTemp = temp;
}
}
System.out.println("Nhiệt độ cao nhất: " + maxTemp);
}
}

6. Best Practices ✅

  1. Sử Dụng Biến Có Ý Nghĩa

    // Không nên
    for (int x = 0; x < n; x++) { ... }

    // Nên
    for (int index = 0; index < array.length; index++) { ... }
  2. Tránh Thay Đổi Biến Đếm Trong Vòng Lặp

    // Không nên
    for (int i = 0; i < n; i++) {
    i++; // Thay đổi biến đếm
    }
  3. Sử Dụng For-Each Khi Có Thể

    // Thay vì
    for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
    }

    // Sử dụng
    for (int number : array) {
    System.out.println(number);
    }
  4. Tối Ưu Điều Kiện

    // Không nên
    for (int i = 0; i < array.length; i++) {
    if (array[i] != null) {
    // Xử lý
    }
    }

    // Nên
    int length = array.length;
    for (int i = 0; i < length; i++) {
    if (array[i] != null) {
    // Xử lý
    }
    }

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

  1. Vòng Lặp Vô Hạn

    for (int i = 0; i < 5; i--) { // i luôn giảm
    System.out.println(i);
    }
  2. Truy Cập Ngoài Giới Hạn Mảng

    int[] array = {1, 2, 3};
    for (int i = 0; i <= array.length; i++) { // Lỗi ArrayIndexOutOfBoundsException
    System.out.println(array[i]);
    }
  3. Thay Đổi Collection Trong Vòng Lặp

    ArrayList<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");

    for (String item : list) {
    list.remove(item); // Lỗi ConcurrentModificationException
    }

💡 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 vòng lặp for 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 while
  • Học cách sử dụng vòng lặp do-while
  • Thực hành với các ví dụ thực tế
  • Tìm hiểu về break và continue