Mục lục bài họcĐang ở d02-b1
Boolean Expressions and De Morgan's Laws
Boolean expressions
A boolean expression evaluates to exactly one of two values, true or false. Relational operators build them from numbers: <, <=, >, >=, ==, !=. Logical operators combine them: && (and), || (or), ! (not).
Short-circuit evaluation
Java evaluates && and || from left to right and stops as soon as the answer is known. In p && q the operand q is evaluated only when p is true; in p || q the operand q is evaluated only when p is false. That is why the guard s.length() > 0 && s.substring(0, 1).equals("A") is safe on an empty string while the same two operands written in the other order throw an exception.
De Morgan's Laws
!(p && q) is equivalent to !p || !q, and !(p || q) is equivalent to !p && !q. Negating a relational operator moves it across the boundary rather than past it: the negation of x < 5 is x >= 5, never x > 5. Two boolean expressions are equivalent when they agree on every row of the truth table, and that table is the only proof the exam accepts.
Biểu thức boolean
Một biểu thức boolean chỉ nhận đúng hai giá trị true hoặc false. Toán tử quan hệ (<, <=, >, >=, ==, !=) sinh ra chúng từ số; toán tử logic (&&, ||, !) ghép chúng lại.
Rút gọn mạch — short-circuit
Java tính từ trái sang phải và dừng ngay khi đã biết kết quả. Với p && q, vế q chỉ được tính khi p đúng; với p || q, vế q chỉ được tính khi p sai. Đây không phải chi tiết vụn: nó là lý do câu chặn s.length() > 0 && s.substring(0, 1).equals("A") chạy an toàn trên chuỗi rỗng, còn đổi chỗ hai vế là ném ngoại lệ. Thứ tự hai vế của && là một quyết định thiết kế, không phải chuyện sắp cho đẹp.
Luật De Morgan
!(p && q) tương đương !p || !q; !(p || q) tương đương !p && !q. Phủ định một toán tử quan hệ là bước qua biên và giữ lại biên: phủ định của x < 5 là x >= 5, không bao giờ là x > 5. Hai biểu thức gọi là tương đương khi trùng nhau ở mọi dòng bảng chân trị — thử vài giá trị rồi kết luận là cách sai nhiều nhất trong chương này.
x = 5 không thoả x < 5 nên nó phải nằm trong phần phủ định.Viết lại biểu thức sau sao cho không còn dấu phủ định nào bao ngoài, rồi nói rõ điều kiện mới đọc thành câu tiếng Việt gì.
!(age >= 13 && age < 65)
Bước 1 — De Morgan. Dấu phủ định bao ngoài một phép &&, nên nó biến thành || và rải vào hai vế:
!(age >= 13) || !(age < 65)
Bước 2 — phủ định từng phép so sánh. Phủ định của >= là <; phủ định của < là >=:
age < 13 || age >= 65
Đọc thành câu: "dưới 13 tuổi, hoặc từ 65 tuổi trở lên". Hai mốc 13 và 65 vẫn nằm nguyên chỗ cũ — chỉ đổi bên.
Cách tự kiểm nhanh: lấy ba giá trị 12, 13, 64, 65 thay vào cả hai biểu thức. Bốn số này là bốn điểm sát biên; nếu hai biểu thức trùng nhau ở cả bốn thì gần như chắc chắn đúng.
x < 5 thành x > 5, đánh rơi mất giá trị x = 5. Với dữ liệu thật, lỗi này chỉ hiện ra đúng một trường hợp nên chạy thử qua loa không bắt được. Cách chặn: mỗi lần phủ định một phép so sánh, viết ra giá trị nằm ngay tại biên rồi thay vào cả hai biểu thức — nếu hai bên cho kết quả khác nhau thì bạn vừa đánh rơi biên.! bao ngoài && thì thành ||, và ngược lại. Phủ định phép so sánh thì lật dấu và giữ nguyên biên. Thứ tự hai vế của && là chỗ đặt câu chặn, đừng đảo.Đọc xong rồi — làm thử ngay
Bài tập của chương Unit 2 — Selection and Iteration gồm 14 câu trắc nghiệm và 8 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.