Bài 14: Cấu trúc rẽ nhánh if
Java cung cấp các lệnh rẽ nhánh để có thể thực hiện một trong nhiều phương án khác nhau khi lập trình. Có 3 loại cấu trúc rẽ nhánh:
- if – if thiếu
- if … else … – if đủ
- switch … case … – switch
Cấu trúc rẽ nhánh dùng để giải quyết các bài toán xử lý công việc trong thực tế đi kèm với một mệnh đề điều kiện. Ví dụ: “Nếu trời lạnh thì chúng ta sẽ đi tìm thêm quần áo ấm”.
1. Cấu trúc if dạng thiếu
if (<Biểu thức điều kiện>)
<tập các câu lệnh>
Hoạt động: Trước tiên tính giá trị của biểu thức điều kiện. Nếu biểu thức điều kiện có giá trị true (đúng) thì thực hiện tập các câu lệnh, sau đó thực hiện tiếp các lệnh còn lại (nếu có) của chương trình. Trường hợp biểu thức điều nhận giá trị false (sai) thì tập các lệnh sẽ bị bỏ qua và thực hiện tiếp các lệnh còn lại của chương trình.
Lưu ý: Để gom nhóm nhiều câu lệnh để tạo thành khối lệnh thì ta sử dụng cặp ‘{‘ và ‘}’.
Sơ đồ hoạt động:

Sơ đồ hoạt động if thiếu
public class IfThieu
{
public static void main(String[] args){
int i=5;
if((i>=1) && (i<=10)){
System.out.println("Nam trong doan tu 1 den 10.");
}
}
}
Câu hỏi: Bạn thử đặt dấu chấm phẩy ';' vào ngay sau mệnh đề if rồi chạy thử chương trình để xem kết quả nhé!
2. Cấu trúc if dạng đủ
if (<Biểu thức điều kiện>)
<tập các câu lệnh của if>
else
<tập các câu lệnh của else>
Hoạt động: Tương tự như trên, nếu biểu thức điều kiện mang giá trị true thì thực hiện các câu lệnh của if, ngược lại nếu biểu thức điều kiện mang giá trị false thì thực hiện các câu lệnh của else. Sau đó, tiếp tục chạy tiếp các lệnh còn lại (nếu có) của chương trình.
Lưu ý: Để gom nhóm nhiều câu lệnh để tạo thành khối lệnh thì ta sử dụng cặp '{' và '}'.
Sơ đồ hoạt động:

Sơ đồ hoạt động if đủ
public class IfThieu
{
public static void main(String[] args){
int i=5;
if((i>=1) && (i<=10)){
System.out.println("Nam trong doan tu 1 den 10.");
} else {
System.out.println("Nam ngoai doan tu 1 den 10.");
}
}
}
Lưu ý:
Các lệnh if, if ... else ... có thể lồng nhau, nhưng khi đó chúng ta phải thực sự lồng nhau và không được cắt nhau. Chúng phải tuân theo quy tắc sau:
Các lệnh else luôn sánh với câu lệnh if gần nhất nếu câu lệnh đó chưa có lệnh else tương ứng.
Ví dụ: Giải và biện phương trình bậc nhất 1 ẩn số
public class IfThieu
{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
// Khai bao bien
double a, b, x;
// Nhap du lieu
System.out.print("Nhap vao he so a: ");
a=sc.nextDouble();
System.out.print("Nhap vao he so b: ");
b=sc.nextDouble();
// Giai va bien luan
if(a==0){
if(b==0){
System.out.println("Phuong trinh vo so nghiem!");
} else {
System.out.println("Phuong trinh vo nghiem!");
}
} else {
x=-b/a;
System.out.println("Phuong trinh co nghiem la: "+x);
}
sc.close();
}
}
3. Cấu trúc if-else nhiều nhánh
Khi muốn thực hiện 1 trong n quyết định, có thể sử dụng cú pháp sau:
if (<Biểu thức điều kiện số 1>)
<tập các câu lệnh của if 1>
else if (<Biểu thức điều kiện số 2>)
<tập các câu lệnh của if 2>
...
else if (<Biểu thức điều kiện số n>)
<tập các câu lệnh của if n>
else
<tập các câu lệnh của n+1>
Ví dụ:
public class IfThieu
{
public static void main(String[] args){
int diem=9;
if((diem>10) || (diem<0)){
System.out.println("Diem nhap vao khong hop le!");
} else if(diem>=9){
System.out.println("Xuat sac!");
} else if(diem>=6.5){
System.out.println("Kha!");
} else if(diem>=5){
System.out.println("Trung binh!");
} else if(diem>=3.5){
System.out.println("Yeu!");
} else {
System.out.println("Kem!");
}
}
}
4. Toán tử ba ngôi
Biểu thức 1 ? Biểu thức 2 : Biểu thức 3
Ý nghĩa: Biểu thức 1 nhận giá trị đúng thì toán tử trả về giá trị là Biểu thức 2, ngược lại toán tử trả về giá trị là Biểu thức 3
Ví dụ:
a>b?a:b
Bài tập: Viết chương trình nhập vào một năm (giả sử dữ liệu nhập vào đúng định dạng), hãy kiểm tra năm nhập vào có phải là năm nhuận hay không.