1. Câu lệnh if else
Sẽ chẳng có nhiều ý nghĩa nếu chương trình luôn làm y như nhau, bất kể hoàn cảnh bên ngoài thay đổi thế nào. Chương trình cần biết thích ứng với các tình huống khác nhau và làm việc này trong trường hợp này, việc khác trong trường hợp khác.
Trong Java, điều này được hiện thực bằng câu lệnh điều kiện — các từ khóa if và else, cho phép thực thi các khối lệnh khác nhau tùy vào tính đúng của điều kiện.
Câu lệnh điều kiện gồm ba phần: điều kiện, lệnh 1 và lệnh 2. Nếu điều kiện đúng (true), sẽ thực thi lệnh 1; ngược lại sẽ thực thi lệnh 2. Hai lệnh này không bao giờ được thực thi đồng thời. Dạng tổng quát của câu lệnh như sau:
if (uslovie)
komanda1;
else
komanda2;
if-else
if được hiểu là “nếu”, còn else là “ngược lại”. Bằng ngôn ngữ đời thường có thể viết như sau:
Nếu điều kiện đúng thì
thực hiện lệnh1;
nếu không
thực hiện lệnh2;
if-else bằng ngôn ngữ đời thường
Ví dụ:
// Màn hình sẽ hiển thị: Bạn vẫn còn là trẻ con
int age = 17;
if (age < 18)
System.out.println("Bạn vẫn còn là trẻ con");
else
System.out.println("Bạn đã là người lớn rồi");
// Sẽ in ra: Ấm áp
int temperature = 5;
if (temperature < 0)
System.out.println("Ngoài trời băng giá");
else
System.out.println("Ấm áp");
// Sẽ in ra: Có thể thi bằng lái
int age = 18;
if (age == 18)
System.out.println("Có thể thi bằng lái");
else
System.out.println("Có thể dành tiền mua xe");
2. Khối lệnh
Nếu khi điều kiện (đúng hoặc sai) bạn muốn chương trình thực hiện nhiều lệnh, có thể gộp chúng vào một khối lệnh.
Để gộp các lệnh vào một khối, hãy “bọc” chúng trong dấu ngoặc nhọn. Tổng quát như sau:
{
komanda1;
komanda2;
komanda3;
}
Số lệnh trong khối có thể bao nhiêu cũng được, thậm chí là 0.
Ví dụ kết hợp if-else và khối lệnh:
// Sẽ in ra: Em vẫn còn là trẻ con. Đừng cãi người lớn
int age = 17;
if (age < 18)
{
System.out.println("Em vẫn còn là trẻ con");
System.out.println("Đừng cãi người lớn");
}
else
{
System.out.println("Bạn đã là người lớn rồi");
System.out.println("Giới trẻ thời nay thật là...");
}
// Sẽ in ra: Ấm áp
int temperature = 5;
if (temperature < 0)
{
System.out.println("Ngoài trời băng giá");
System.out.println("Đội mũ vào");
}
else
System.out.println("Ấm áp");
// Sẽ chạy một khối lệnh rỗng. Không có gì được in ra màn hình.
int age = 21;
if (age == 18)
System.out.println("Có thể lấy bằng lái");
else
{
}
3. Cú pháp rút gọn của if
Nếu mã trong khối else không có, bạn có thể bỏ qua nó. Khi đó câu lệnh if sẽ có dạng:
if (uslovie)
{
komanda1;
}
if
Ví dụ:
int age = 19;
if (age >= 18)
{
System.out.println("Bạn đã đủ tuổi trưởng thành!");
}
Nó hoạt động thế nào?
Nếu điều kiện đúng, khối mã sẽ được thực thi. Nếu sai, không có gì xảy ra — chương trình tiếp tục chạy.
Khối else trong chương trình vẫn có, nhưng rỗng (giữa dấu ngoặc nhọn không có lệnh nào). Bạn có thể bỏ hẳn nó đi: chương trình sẽ không thay đổi gì.
4. Kết hợp nhiều điều kiện: else if
Đôi khi cần kiểm tra không chỉ “có/không”, mà phải chọn giữa nhiều phương án. Lúc này, chuỗi else if sẽ hữu ích:
if (uslovie1)
{
// Thực thi nếu uslovie1 đúng
}
else if (uslovie2)
{
// Thực thi nếu uslovie2 đúng và uslovie1 — sai
}
else
{
// Thực thi nếu không điều kiện nào ở trên khớp
}
Ví dụ:
int hour = 13;
if (hour < 12)
{
System.out.println("Chào buổi sáng!");
}
else if (hour < 18)
{
System.out.println("Chào buổi chiều!");
}
else
{
System.out.println("Chào buổi tối!");
}
Điều gì đang xảy ra ở đây?
- Nếu thời gian trước 12 — buổi sáng.
- Từ 12 đến 18 — buổi chiều.
- Lớn hơn nữa — buổi tối.
- Chương trình chỉ chọn MỘT phương án! Ngay khi có điều kiện thỏa — các điều kiện còn lại thậm chí sẽ không được kiểm tra.
5. Minh họa sơ đồ: lưu đồ rẽ nhánh
Dưới dạng lưu đồ, nó trông như sau:
Còn nếu có nhiều điều kiện:
Điều này rất giống các ngã rẽ trong những trò chơi nhập vai trên bàn: rẽ trái — một chuyện, rẽ phải — chuyện khác, đi thẳng — lại chuyện khác!
6. Có thể kiểm tra những điều kiện nào?
Bên trong dấu ngoặc tròn sau if phải là MỘT biểu thức logic — kết quả là true hoặc false.
Các toán tử so sánh cơ bản:
| Toán tử | Ý nghĩa | Ví dụ |
|---|---|---|
|
Bằng | |
|
Khác | |
|
Lớn hơn | |
|
Nhỏ hơn | |
|
Lớn hơn hoặc bằng | |
|
Nhỏ hơn hoặc bằng | |
Ví dụ về điều kiện:
if (number == 10)
if (age != 18)
if (temperature > 36)
if (balance <= 0)
Lưu ý: = (một dấu) — là phép gán. == (hai dấu) — là so sánh. Đây là một trong những lỗi phổ biến nhất ở người mới! Nếu bạn vô tình viết:
if (x = 5) // LỖI!
— trình biên dịch sẽ báo lỗi, và điều đó hoàn toàn đúng.
7. Làm việc với chuỗi trong điều kiện
So sánh bằng == trong Java hoạt động chính xác cho số nguyên. Không nên so sánh số thực bằng ==, và không được so sánh chuỗi bằng == — với chuỗi hãy dùng phương thức equals(), phương thức này so sánh nội dung chuỗi (không phải tham chiếu).
Chúng ta sẽ còn bàn chi tiết hơn về các tinh tế khi so sánh chuỗi sau này. Còn cách so sánh đúng — xem ví dụ dưới đây:
String password = console.nextLine();
if (password.equals("qwerty")) // gọi phương thức equals() và truyền vào chuỗi thứ hai
{
System.out.println("Bạn đã đăng nhập!");
}
8. Đặc điểm và lưu ý:
Dấu ngoặc nhọn: cần hay không?
Nếu sau if hoặc else chỉ có một lệnh, có thể bỏ dấu ngoặc nhọn:
if (age > 18)
System.out.println("Bạn hơn 18 tuổi!");
// Nhưng an toàn hơn là LUÔN viết ngoặc:
if (age > 18)
{
System.out.println("Bạn hơn 18 tuổi!");
}
Lời khuyên: hãy luôn viết kèm ngoặc. Điều này giúp tránh vô số lỗi, đặc biệt khi mở rộng mã.
Lỗi logic: cẩn thận với điều kiện!
Nếu bạn viết như sau:
if (age > 18)
System.out.println("Bạn hơn 18 tuổi!");
System.out.println("Chào mừng!");
Trình biên dịch sẽ hiểu mã như sau:
if (age > 18)
{
System.out.println("Bạn hơn 18 tuổi!");
}
System.out.println("Chào mừng!");
Dòng thứ hai luôn được thực thi — cần có ngoặc để cả hai dòng đều nằm trong “nhánh”.
GO TO FULL VERSION