Bài 15: Cấu trúc rẽ nhánh switch
1. Câu lệnh switch
Câu lệnh này cho phép rẽ nhánh theo nhiều nhánh tuyển chọn dựa trên các giá trị kiểu nguyên của biểu thức. Nó có dạng:
Cú pháp:
switch (<Biểu thức nguyên>){
case nhan_1: <tập các câu lệnh 1>; break;
case nhan_2: <tập các câu lệnh 2>; break;
…
case nhan_n: <tập các câu lệnh n>; break;
default: <tập các câu lệnh>; break;
}
switch (<Biểu thức nguyên>){
case nhan_1: <tập các câu lệnh 1>; break;
case nhan_2: <tập các câu lệnh 2>; break;
…
case nhan_n: <tập các câu lệnh n>; break;
default: <tập các câu lệnh>; break;
}
Hoạt động:
- Trước tiên, tính giá trị của biểu thức nguyên
- So sánh giá trị tính được với các nhan_i, i = 1, 2, …, n. Nếu giá trị đó bằng nhan_i thì thực hiện nhánh câu lệnh tương ứng với nhãn đó. Sau đó theo điều khiển chương trình (nếu có break thì chuyển tới sau lệnh switch)
Sơ đồ hoạt động:
Một vài quy tắc lệnh switch:
- Biểu thức switch phải sinh ra một giá trị kiểu char, byte, short, hoặc int, và phải luôn được bao trong cặp dấu ngoặc tròn.
- nhan_i phải có cùng kiểu dữ liệu với giá trị của biểu thức switch.
- Từ khóa break là tùy chọn, nhưng nên được sử dụng cuối mỗi trường hợp để thoát khỏi phần còn lại của lệnh switch. Nếu không có lệnh break, lệnh case tiếp theo sẽ được thực hiện.
- Trường hợp default là tùy chọn, có thể sử dụng để thực hiện các lệnh khi không có trường hợp nào ở trên là đúng.
- Thứ tự của các trường hợp (gồm cả trường hợp default) là không quan trọng. Tuy nhiên, phong cách lập trình tốt là nên theo một trình tự logic của các trường hợp và đặt trường hợp default cuối cùng.
Ví dụ 1:
public class SwitchClass
{
public static void main(String[] args){
int thu = 3;
switch(thu){
case 2:
System.out.println("Co tiet mon Van");
break;
case 3:
System.out.println("Co tiet mon Toan");
break;
case 4:
System.out.println("Co tiet mon Dia");
break;
case 5:
System.out.println("Co tiet mon Sinh");
break;
case 6:
System.out.println("Co tiet mon Van");
break;
case 7:
System.out.println("Co tiet mon Cong nghe");
break;
}
}
}
Ví dụ 2:
public class SwitchClass
{
public static void main(String[] args){
int thu = 3;
switch(thu){
case 2:
case 6:
System.out.println("Co tiet mon Van");
break;
case 3:
System.out.println("Co tiet mon Toan");
break;
case 4:
System.out.println("Co tiet mon Dia");
break;
case 5:
System.out.println("Co tiet mon Sinh");
break;
case 7:
System.out.println("Co tiet mon Cong nghe");
break;
default:
System.out.println("Nay la chu nhat roi!");
break;
}
}
}
Ví dụ 3:
public class SwitchClass
{
public static void main(String[] args){
int thang = 8;
switch(thang){
case 11:
case 12:
case 1:
System.out.println("Mua dong!");
break;
case 2:
case 3:
case 4:
System.out.println("Mua xuan!");
break;
case 5:
case 6:
case 7:
System.out.println("Mua he!");
break;
case 8:
case 9:
case 10:
switch(thang){
case 8:
System.out.println("Dau mua thu!");
break;
case 9:
System.out.println("Hoc sinh tuu truong!");
break;
}
System.out.println("Mua thu la vang roi!");
break;
default:
System.out.println("Khong phai la thang!");
}
}
}
Bài tập: Nhập vào tháng và năm dương lịch. Đưa ra số ngày của tháng trong năm đó. Biết rằng tháng 2 của năm nhuận có 29 ngày, năm không nhuận có 28 ngày (năm nhuận là năm (chia hết cho 4 và không chia hết cho 100) hoặc (chia hết cho 400)).