Cấu trúc rẽ nhánh if, if-else
Cấu trúc rẽ nhánh cơ bản if
Cú pháp
if(conditional) { statement1; statement2; }
Mô tả thực thi
- Nếu
conditional
trả vềtrue
, thực thi khốistatement1
vàstatement2
. - Nếu
conditional
trả vềfalse
thì bỏ qua khối này.
Cấu trúc rẽ nhánh mở rộng if-else
Cú pháp
if(conditional) { statement1; statement2; } else { statement3; statement4; }
Mô tả thực thi
Nếu conditional
trả về true
, thực thi khối statement1
và statement2
.
Nếu conditional
trả về false
, thực thi khối statement3
và statement4
.
Ví dụ
int x = 3; if(x > 2) { System.out.println("X > 2"); } else { System.out.println("X <= 2"); }
Ngoài ra, ngôn ngữ lập trình Java hỗ trợ cấu trúc dạng mở rộng hơn, gồm nhiều cấu trúc if-else lồng nhau dạng như sau:
if(conditional) { statement1; } else { if(conditional2) { statement2; } else { statement3; } }
- Nếu
conditional
trả vềtrue
, thực thistatement1
. - Nếu
conditional
trả vềfalse
, xét tiếp khốielse
như sau:- Nếu
conditional2
trả vềtrue
,thực thistatement2
. - Nếu
conditional2
trả vềfalse
, thực thistatement3
.
- Nếu
Các cấu trúc rẽ nhánh dạng cao hơn (nhiều if-else lồng nhau) cũng được thực thi tương tự.
Cấu trúc rẽ nhánh switch-case
Quan điểm sử dụng
Cần xét các tháng trong 1 năm, sẽ cần nhiều cấu trúc rẽ nhánh dạng if, if-else hoặc các dạng mở rộng hơn để xét 12 tháng, như vậy tổ chức sẽ có thể rối, Java hỗ trợ thêm cấu trúc switch-case cho các trường hợp lựa chọn với những điều kiện giống nhau này để cách tổ chức code gọn gàng hơn.
Cấu trúc switch-case
Cú pháp
switch(expression) { case (value1): statement1; break; case (value2): statement2; break; default: statement4; break; }
Mô tả thực thi
- Bước 1: Tính toán biểu thức (expression).
- Bước 2: So sánh từng trường hợp (case) theo thứ tự từ trên xuống, với kết quả của expression đã tính toán ở bước 1.
- Nếu 1 trong các case thỏa mãn (bằng) với expression, thì thực thi khối mã xử lý trong case đó. Sau đó đến bước 3.
- Nếu không, thực thi khối default.
- Bước 3: Sau khi thực hiện khối, có thể 1 trong các khối case hoặc default (tùy theo giá trị của expression), sẽ thực hiện
break
, nghĩa l thoát khỏi khối switch-case.
Lưu ý
Có thể có nhiều hơn 2 case, trong phần cú pháp và mô tả thực thi chỉ thực hiện với 2 case ngắn gọn. Trong cú pháp của switch-case, có thể không viết phần default
. Sau khi kiểm tra nếu không có case nào thỏa mãn, chương trình sẽ tự động thoát ra khỏi khối lệnh switch-case.
Ví dụ so sánh if-else và switch-case
Sử dụng cấu trúc dạng if-else
int month = 2; if(month == 1) System.out.println("January"); if(month == 2) System.out.println("February"); if(month == 3) System.out.println("March"); if(month == 4) System.out.println("April"); if(month == 5) System.out.println("May"); if(month == 6) System.out.println("June"); if(month == 7) System.out.println("July"); if(month == 8) System.out.println("August"); if(month == 9) System.out.println("September"); if(month == 10) System.out.println("October"); if(month == 11) System.out.println("November"); if(month == 12) System.out.println("December"); if(month < 1 || month > 12) System.out.println("Error");
Sử dụng cấu trúc dạng switch-case
int month = 2; switch(month) { case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September");break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Error"); break; }
Trong mỗi case, khi đoạn mã thực thi, phải thêm vào mã xử lý break
, tránh trường hợp chương trình tiếp tục thực thi các case không mong muốn bên dưới.
Sử dụng switch-case có thể không làm mã nguồn trở nên ngắn hơn, nhưng nó giúp cho mã nguồn rõ ràng, dễ hiểu hơn, đôi khi cải thiện hiệu suất hoạt động của chương trình.