Skip to main content

Toán Tử Logic Trong Java - Kết Hợp Các Điều Kiện! 🧠

Chào mừng bạn đến với bài học về toán tử logic trong Java! Trong bài học này, chúng ta sẽ tìm hiểu về các toán tử dùng để kết hợp các điều kiện boolean và tạo ra các biểu thức logic phức tạp.

💡 Fun Fact: Toán tử logic trong Java sử dụng short-circuit evaluation, nghĩa là nó sẽ dừng đánh giá ngay khi có thể xác định kết quả cuối cùng.

1. Các Toán Tử Logic Cơ Bản ✨

VÀ (&&) 🤝

boolean a = true;
boolean b = true;
boolean result = a && b; // true

boolean c = true;
boolean d = false;
boolean result2 = c && d; // false

HOẶC (||) 🔄

boolean a = true;
boolean b = false;
boolean result = a || b; // true

boolean c = false;
boolean d = false;
boolean result2 = c || d; // false

PHỦ ĐỊNH (!) ❌

boolean a = true;
boolean result = !a; // false

boolean b = false;
boolean result2 = !b; // true

2. Toán Tử Logic Với Điều Kiện 🎯

Toán Tử && (AND)

int age = 25;
int salary = 50000;
boolean hasLicense = true;

boolean canDrive = age >= 18 && hasLicense; // true
boolean canBuyCar = age >= 18 && salary >= 30000; // true

Toán Tử || (OR)

boolean isWeekend = true;
boolean isHoliday = false;
boolean isVacation = true;

boolean canSleepLate = isWeekend || isHoliday || isVacation; // true

Toán Tử ! (NOT)

boolean isRaining = true;
boolean canGoOut = !isRaining; // false

boolean isClosed = false;
boolean isOpen = !isClosed; // true

3. Kết Hợp Nhiều Điều Kiện 🔄

Ví Dụ Phức Tạp

int age = 25;
int salary = 50000;
boolean hasLicense = true;
boolean hasInsurance = true;

boolean canDrive = age >= 18 && hasLicense;
boolean canAffordCar = salary >= 30000;
boolean isInsured = hasInsurance;

boolean canBuyCar = canDrive && canAffordCar && isInsured;

Sử Dụng Dấu Ngoặc

boolean a = true;
boolean b = false;
boolean c = true;
boolean d = false;

// Kết quả khác nhau tùy thuộc vào dấu ngoặc
boolean result1 = a && b || c && d; // true
boolean result2 = a && (b || c) && d; // false

⚠️ Lưu ý: Luôn sử dụng dấu ngoặc để làm rõ thứ tự ưu tiên của các toán tử logic.

4. Short-Circuit Evaluation ⚡

Toán Tử &&

boolean a = false;
boolean b = true;

// b không được đánh giá vì a là false
boolean result = a && b;

Toán Tử ||

boolean a = true;
boolean b = false;

// b không được đánh giá vì a là true
boolean result = a || b;

💡 Mẹo: Short-circuit evaluation giúp tối ưu hiệu suất bằng cách dừng đánh giá ngay khi có thể xác định kết quả.

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

Kiểm Tra Đăng Nhập

public class LoginChecker {
public static void main(String[] args) {
String username = "admin";
String password = "password123";
boolean isActive = true;

boolean isValidUsername = username != null && !username.isEmpty();
boolean isValidPassword = password != null && password.length() >= 8;

if (isValidUsername && isValidPassword && isActive) {
System.out.println("Đăng nhập thành công");
} else {
System.out.println("Đăng nhập thất bại");
}
}
}

Kiểm Tra Điều Kiện Mua Hàng

public class PurchaseValidator {
public static void main(String[] args) {
double balance = 1000.0;
double price = 500.0;
boolean hasDiscount = true;
boolean isHoliday = false;

boolean canAfford = balance >= price;
boolean hasValidDiscount = hasDiscount && !isHoliday;

if (canAfford && hasValidDiscount) {
System.out.println("Có thể mua hàng với giá giảm");
} else if (canAfford) {
System.out.println("Có thể mua hàng với giá thường");
} else {
System.out.println("Không đủ tiền");
}
}
}

Kiểm Tra Điều Kiện Học Tập

public class StudentEligibility {
public static void main(String[] args) {
int age = 20;
double gpa = 3.5;
boolean hasCompletedPrerequisites = true;
boolean hasFinancialAid = true;

boolean isAgeEligible = age >= 18;
boolean isGPAEligible = gpa >= 3.0;
boolean hasRequirements = hasCompletedPrerequisites && hasFinancialAid;

if (isAgeEligible && isGPAEligible && hasRequirements) {
System.out.println("Đủ điều kiện đăng ký");
} else {
System.out.println("Không đủ điều kiện");
}
}
}

6. Best Practices ✨

1. Sử Dụng Dấu Ngoặc Rõ Ràng

// Không rõ ràng
if (a && b || c && d) { ... }

// Rõ ràng hơn
if ((a && b) || (c && d)) { ... }

2. Tách Điều Kiện Phức Tạp

// Khó đọc
if (age >= 18 && hasLicense && !isDrunk && hasInsurance) { ... }

// Dễ đọc hơn
boolean isLegalAge = age >= 18;
boolean canDrive = hasLicense && !isDrunk;
boolean isInsured = hasInsurance;

if (isLegalAge && canDrive && isInsured) { ... }

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

// Không rõ ràng
boolean flag = true;

// Rõ ràng hơn
boolean isEligible = true;

4. Tránh Phủ Định Kép

// Khó đọc
if (!(!isActive)) { ... }

// Dễ đọc hơn
if (isActive) { ... }

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

1. Quên Dấu Ngoặc

// Kết quả không mong muốn
if (a && b || c) { ... }

// Kết quả mong muốn
if ((a && b) || c) { ... }

2. Sử Dụng & Và | Thay Vì && Và ||

// Luôn đánh giá cả hai điều kiện
if (a & b) { ... }

// Short-circuit evaluation
if (a && b) { ... }

3. So Sánh Boolean Với True/False

// Không cần thiết
if (isActive == true) { ... }

// Đơn giản hơn
if (isActive) { ... }

💡 Lời khuyên: Hãy luôn cẩn thận khi kết hợp các điều kiện logic và sử dụng dấu ngoặc để làm rõ thứ tự ưu tiên. Điều này sẽ giúp code của bạn dễ đọc và dễ bảo trì hơn.

8. Ví Dụ Thực Tế Nâng Cao 🚀

Hệ Thống Xác Thực Nhiều Yếu Tố

public class MultiFactorAuth {
public static void main(String[] args) {
String username = "admin";
String password = "password123";
String otp = "123456";
boolean hasBiometric = true;

// Kiểm tra các yếu tố xác thực
boolean hasValidCredentials = username != null && password != null;
boolean hasValidOTP = otp != null && otp.length() == 6;
boolean hasBiometricAuth = hasBiometric;

// Xác thực với nhiều yếu tố
if (hasValidCredentials && (hasValidOTP || hasBiometricAuth)) {
System.out.println("Xác thực thành công!");
} else {
System.out.println("Xác thực thất bại!");
}
}
}

Hệ Thống Đánh Giá Sản Phẩm

public class ProductReviewSystem {
public static void main(String[] args) {
int rating = 5;
String comment = "Sản phẩm rất tốt!";
boolean hasImage = true;
boolean isVerifiedPurchase = true;

// Kiểm tra điều kiện đánh giá
boolean hasValidRating = rating >= 1 && rating <= 5;
boolean hasValidComment = comment != null && comment.length() >= 10;
boolean isEligibleForBonus = hasImage && isVerifiedPurchase;

if (hasValidRating && hasValidComment) {
System.out.println("Đánh giá hợp lệ!");
if (isEligibleForBonus) {
System.out.println("Bạn nhận được 100 điểm thưởng!");
}
} else {
System.out.println("Đánh giá không hợp lệ!");
}
}
}

Hệ Thống Kiểm Tra Điều Kiện Tuyển Dụng

public class RecruitmentSystem {
public static void main(String[] args) {
int yearsOfExperience = 5;
String education = "Bachelor";
boolean hasCertification = true;
boolean hasPortfolio = true;
double expectedSalary = 20000000;

// Kiểm tra các điều kiện
boolean hasRequiredExperience = yearsOfExperience >= 3;
boolean hasRequiredEducation = education.equals("Bachelor") || education.equals("Master");
boolean hasRequiredSkills = hasCertification && hasPortfolio;
boolean hasReasonableSalary = expectedSalary <= 25000000;

if (hasRequiredExperience && hasRequiredEducation && hasRequiredSkills && hasReasonableSalary) {
System.out.println("Bạn đủ điều kiện ứng tuyển!");
} else {
System.out.println("Bạn chưa đủ điều kiện ứng tuyển.");
}
}
}

💡 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 toán tử logic 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ề toán tử điều kiện
  • Học cách sử dụng toán tử bitwise
  • Thực hành với các ví dụ thực tế
  • Tìm hiểu về toán tử instanceof