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
- Khởi tạo:
int i = 0
- Thiết lập giá trị ban đầu - Điều kiện:
i < 5
- Kiểm tra điều kiện trước mỗi lần lặp - 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 ✅
-
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++) { ... } -
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
} -
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);
} -
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 ⚠️
-
Vòng Lặp Vô Hạn
for (int i = 0; i < 5; i--) { // i luôn giảm
System.out.println(i);
} -
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]);
} -
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