Mục lục
Như bài mệnh đề if – else trước mình có giới thiệu. Khi chúng ta có quá nhiều điều kiện thì mệnh đề Switch Case được dùng để thay thế.
Cú pháp của mệnh đề Switch case
Switch(variable or expression) { case x: // code block case y: // code block . . . case n: // code block default: // code block }
- variable: biến được đưa vào để kiểm tra
- expression: biểu thức được đưa vào để kiểm tra
- case x: nếu giá trị variable = x thì thực thi code block trong thân case x. tương tự đối với case khác.
- default: Code bên trong block default sẽ luôn được thực thi.
Ví dụ 1: switch case với giá trị đưa vào là một biến.
public class Main { public static void main(String[] args) { int a = 2; switch (a) { case 1: System.out.println("Value is 1"); case 2: System.out.println("Value is 2"); case 3: System.out.println("Value is 3"); default: System.out.println("Value is default"); } } }
Output:
Value is 2
Value is 3
Value is default
Ủa? sao mình chỉ mong muốn xuất ra màn hình là “Value is 2” thôi tại sao lại in ra cả những trường hợp nằm ở phía sau case 2 nữa?
À ha, đây không phải là bug, đây là tính năng các bạn nhé. Các bạn xem sơ đồ sau
À ha, như các bạn đã thấy, mệnh đề Switch-case sau khi nhận được một biến hoặc một biểu thức để kiểm tra thì nó sẽ tiến hành kiểm tra cho đến khi gặp được trường hợp thoả thì nó sẽ thực hiện code bên trong block case đó và thực hiện luôn những case sau nó nếu tồn tại. Code trong default sẽ luôn được thực hiện.
Thêm một ví dụ switch-case cho trường hợp expression
public class Main { public static void main(String[] args) { int a = 1; switch (a + 2) { case 1: System.out.println("Value is 1"); case 2: System.out.println("Value is 2"); case 3: System.out.println("Value is 3"); default: System.out.println("Value is default"); } } }
Output:
Value is 3
Value is default
Switch case kết hợp với break
Ở trên rõ ràng chúng ta thấy trong nhiều trường hợp switch-case chạy không đúng với nhu cầu chúng ta. Thông thường thì chúng ta chỉ cần thực thi code ở bên trong trường hợp thoả mãn. Mệnh đề break sẽ giúp chúng ta làm chuyện này nhé.
Khi chúng ta đặt mệnh đề break bên trong code cũng một case nào đó thì code sẽ thực thi cho đến khi gặp mệnh đề break và thoát ra khỏi mệnh đề switch-case.
public class Main { public static void main(String[] args) { int a = 2; switch (a ) { case 1: System.out.println("Value is 1"); break; case 2: System.out.println("Value is 2"); break; case 3: System.out.println("Value is 3"); break; default: System.out.println("Value is default"); } } }
Output: Value is 2
Kết quả như chúng ta mong muốn phải không nào!!!
Tại sao lại không có break trong block default?
Lệnh default được dùng với mục đích là đảm bảo chúng ta sẽ luôn nhận được một thứ gì đó khi đi ra từ mệnh đề switch-case, có thể nó là một giá trị default hay là một thông báo không có giá trị nào thoả mãn các trường hợp trên.
Và code bên trong default luôn thực hiện cuối cùng khi không có trường hợp nào thoả mãn. Vì thế bạn bỏ lệnh break vào đây là vô ích.
Note:
Các bạn có thể dùng các mệnh đề switch case lồng nhau, nhưng làm như vậy code trông sẽ xấu xí lắm nên thôi đừng có dùng nhé =).
Bài tập thực hành
Viết chương trình java kiểm tra bàn phím khi ấn xuống. Nếu người dùng ấn một phím (từ 0 tới 9) thì chương trình sẽ hiển thị số số được nhấn này, ngược lại hiển thị “Phím bạn ấn không phải là số!”.
Bài tham khảo
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Ấn một số trên bàn phím:"); int key = (char) scanner.nextInt(); switch (key) { case 0: System.out.println("Bạn đã ấn số 0"); break; case 1: System.out.println("Bạn đã ấn số 1"); break; case 2: System.out.println("Bạn đã ấn số 2"); break; case 3: System.out.println("Bạn đã ấn số 3"); break; case 4: System.out.println("Bạn đã ấn số 4"); break; case 5: System.out.println("Bạn đã ấn số 5"); break; case 6: System.out.println("Bạn đã ấn số 6"); break; case 7: System.out.println("Bạn đã ấn số 7"); break; case 8: System.out.println("Bạn đã ấn số 8"); break; case 9: System.out.println("Bạn đã ấn số 9"); break; default: System.out.println("Phím bạn ấn không phải là số!"); } } }