TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cấu trúc rẽ nhánh switch - case trong Java.

Trong bài trước, tôi đã hướng dẫn các bạn tìm hiểu và luyện tập một số bài tập cụ thể đối với cấu trúc điều khiển if - else. Trong bài ngày hôm nay, tôi sẽ giới thiệu một dạng khác của cấu trúc điều khiển đó là cấu trúc rẽ nhánh switch - case và vận dụng nó để giải quyết các vấn đề liên quan. Đối với các bạn đã từng học qua một ngôn ngữ lập trình nào đó thì cấu trúc này đã không còn xa lạ gì, nhưng đối với những ai muốn lấy Java làm nền tảng để lập trình thì đây là một khái niệm hết sức mới mẻ nên tôi sẽ cố gắng trình bày thật chi tiết để các bạn có thể nắm rõ cấu trúc này!

1. Mô tả cấu trúc rẽ nhánh switch - case.

Cấu trúc rẽ nhánh switch - case cho phép bạn lựa chọn một trong nhiều phương án có khả năng xảy ra, nó có thể dùng dể thay thế cho cấu trúc điều khiển if - else if - else mà tôi đã trình bày trong bài cấu trúc điều khiển if - else trong Java.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Vậy khi nào chúng ta nên sử dụng cấu trúc rẽ nhánh switch - case thay thế cho cấu trúc điều khiển if - else if - else? Khi mà chúng ta có số trường hợp cần xử lý lớn hơn 3 thì khi đó chúng ta nên sử dụng switch - case để dễ dàng kiểm tra và xử lý, giúp cho chương trình dễ quan sát hơn.

Cú pháp.
switch (biểu_thức) {
	case giá_trị_1:
		Lệnh 1;
		break;
	case giá_trị_2:
		Lệnh 2;
		break;
	...
	case giá_trị_n:
		Lệnh n;
		break;
	[default: Lệnh 0;]
}
trong đó:

  • Biểu_thức phải trả về kết quả là một số nguyên, chuỗi hoặc một ký tự.
  • Giá_trị_1, giá_trị_2,..., giá_trị_n là các biểu thức hằng, nguyên hoặc ký tự và chúng phải khác nhau.
  • Lệnh 1, Lệnh 2, ..., Lệnh n, Lệnh 0 là các lệnh trong thân của switch. Các bạn thấy sau mỗi lệnh này chúng ta có từ khóa break;, từ khóa này có thể có hoặc không có tùy theo từng trường hợp.

Cách thức hoạt động của switch - case như sau:

Đầu tiên, chương trình sẽ so sánh giá trị của biểu_thức với các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n. Nếu trong các giá trị từ giá_trị_1, giá_trị_2,..., giá_trị_n có giá trị nào bằng với giá trị của biểu_thức thì chương trình sẽ bắt đầu thực hiện các lệnh tương ứng nằm trong case của giá trị đó cho đến khi gặp một lệnh break đầu tiên thì thoát ngay khỏi switch, bỏ qua các case (trường hợp) còn lại và thực hiện lệnh đầu tiên nằm ngay sau cấu trúc này. Nếu giá trị của biểu_thức không bằng với bất kỳ giá trị nào trong danh sách giá_trị_1, giá_trị_2 ... giá_trị_n thì Lệnh 0 sẽ được thực hiện nếu có thành phần default.

Lưu đồ hoạt động:

sodokhoiswitch PNG

Dạng 1 là cấu trúc switch có sử dụng từ khóa default, còn dạng 2 là cấu trúc switch không sử dụng từ khóa default.

Lưu ý:

  • Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu }) (vì chưa gặp break coi như chưa ra khỏi lệnh switch).
  • Khi sử dụng lệnh switch có thể xảy ra nhiều giá trị trả về cho một trường hợp (một khả năng xảy ra của biểu thức).

2. Ví dụ switch đơn giản.

Chúng ta có ví dụ sau: Nhập vào một số nguyên từ 1 - 12 từ bàn phím và hiển thị ra tháng tương ứng với số đó (nhập vào số 1 thì sẽ hiển thị ra là "Tháng 1".

Ví dụ.
package cau_truc_switch_case;

import java.util.Scanner;

public class HienThiThangTuongUng {

	public static void main(String[] args) {
		int thang;
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): ");
		thang = scanner.nextInt();
		
		switch (thang) {
			case 1:
				System.out.println("Tháng 1");
				break;
			case 2:
				System.out.println("Tháng 2");
				break;
			case 3:
				System.out.println("Tháng 3");
				break;
			case 4:
				System.out.println("Tháng 4");
				break;
			case 5:
				System.out.println("Tháng 5");
				break;
			case 6:
				System.out.println("Tháng 6");
				break;
			case 7:
				System.out.println("Tháng 7");
				break;
			case 8:
				System.out.println("Tháng 8");
				break;
			case 9:
				System.out.println("Tháng 9");
				break;
			case 10:
				System.out.println("Tháng 10");
				break;
			case 11:
				System.out.println("Tháng 11");
				break;
			case 12:
				System.out.println("Tháng 12");
				break;
			default:
				System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12.");
		}

	}

}
Kết quả sau khi biên dịch chương trình:

ketqua thang PNG

Nếu bạn nhập vào tháng 14 thì chương trình sẽ hiển thị kết quả như sau:

ketqua thangloi PNG

Giải thích hoạt động của chương trình trên:

  • Khi chương trình được thực thi, tôi nhập vào số 4 thì chương trình sẽ nhận thấy số 4 đó ứng với giá trị tại chỉ thị case 4 nên chương trình sẽ chạy tới case 4, sau đó thực hiện lệnh bên trong case này - đó là hiển thị ra màn hình dòng thông báo "Tháng 4".
  • Giả sử sau đó tôi nhập vào số 14 thì chương trình sẽ nhận thấy nó khác với các giá trị từ 1 đến 12, không ứng với bất kỳ giá trị tại chỉ thị case nào nên trường hợp mặc định (ứng với nhãn default) được làm. Vì vậy, dòng thông báo "Số nhập vào phải nằm trong khoảng từ 1 đến 12" sẽ được hiển thị.

Giả sử tôi sửa đoạn chương trình trên thành như sau:

Ví dụ
package cau_truc_switch_case;

import java.util.Scanner;

public class HienThiThangTuongUng {

	public static void main(String[] args) {
		int thang;
		String thangTuongUng = "";
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("Nhập vào 1 số nguyên (từ 1 đến 12): ");
		thang = scanner.nextInt();
		
		switch (thang) {
			case 1:
				thangTuongUng = "Tháng 1";
			case 2:
				thangTuongUng = "Tháng 2";
			case 3:
				thangTuongUng = "Tháng 3";
			case 4:
				thangTuongUng = "Tháng 4";
			case 5:
				thangTuongUng = "Tháng 5";
			case 6:
				thangTuongUng = "Tháng 6";
			case 7:
				thangTuongUng = "Tháng 7";
			case 8:
				thangTuongUng = "Tháng 8";
				break;
			case 9:
				thangTuongUng = "Tháng 9";
				break;
			case 10:
				thangTuongUng = "Tháng 10";
				break;
			case 11:
				thangTuongUng = "Tháng 11";
				break;
			case 12:
				thangTuongUng = "Tháng 12";
				break;
			default:
				System.out.println("Số nhập vào phải nằm trong khoảng từ 1 đến 12.");
		}
		System.out.println(thangTuongUng);
	}

}
Sau khi biên dịch thì chương trình sẽ hiển thị kết quả như sau:

ketqua thangkhongbreak PNG

Các bạn thấy tôi nhập vào số 1 nhưng kết quả hiển thị ra là tháng 8. Các bạn biết vì sao không? Như tôi đã nói ở trên, "Lệnh break là để nhảy ra khỏi lệnh switch, nếu không có lệnh này cấu trúc switch sẽ duyệt cả các trường hợp phía dưới cho đến khi gặp dấu đóng switch (dấu })", vì vậy khi bạn nhập vào số 1 thì chương trình sẽ lần lượt gán các giá trị tháng tương ứng cho chuỗi thangTuongUng và khi chạy đến case 8 thì lúc này chuỗi thangTuongUng sẽ có giá trị là "Tháng 8" và sau đó gặp lệnh break nên sẽ kết thúc lệnh switch này và hiển thị giá trị "Tháng 8" ra màn hình.

3. Ví dụ switch có nhiều giá trị trả về cho một trường hợp.

Các bạn theo dõi ví dụ sau: Viết chương trình nhập vào 1 số nguyên, nếu:

  • Số nhập vào là 0 thì thông báo "Số 0".
  • Số nhập vào là 1, 2 thì thông báo "Số nhỏ".
  • Số nhập vào là 3, 4, 5 thì thông báo "Số trung bình".
  • Số nhập vào lớn hơn 5 thì thông báo "Số lớn".

Chúng ta sẽ làm ví dụ này như sau:

Ví dụ
package cau_truc_switch_case;

import java.util.Scanner;

public class HienThiChuoiSoTuongUng {

	public static void main(String[] args) {
		int number;
		Scanner scanner = new Scanner(System.in);
		
		System.out.println("Nhập vào 1 số bất kỳ: ");
		number = scanner.nextInt();
		
		switch (number) {
			case 0:
				System.out.println("Số 0");
				break;
			case 1:
			case 2:
				System.out.println("Số nhỏ");
				break;
			case 3:
			case 4:
			case 5:
				System.out.println("Số trung bình");
				break;
			default:
				System.out.println("Số lớn");
		}
	}

}

Kết quả sau khi biên dịch chương trình:

ketqua sotuongung PNG

Các bạn thấy trong đề bài trên chúng ta có 3 trường hợp số 3, 4, 5 cùng có kết quả chung là "Số trung bình", vì vậy 3 trường hợp này chỉ dùng chung một chỉ thị break. Chẳng hạn khi số nhập vào là 3: chương trình chạy tới case 3, sau đó chạy tiếp và hiển thị dòng thông báo "Số trung bình" ra màn hình và chỉ nhảy khỏi cấu trúc switch khi gặp chỉ thị break ở dòng 26.

4. Lời kết.

Đây là bài cuối cùng trong chương Cấu trúc điều khiển. Các bạn hãy cố nắm chắc phần kiến thức mà tôi đã trình bày trong chương này và vận dụng nó thật tốt để giải quyết các vấn đề khác sau này. Sang chương sau, tôi sẽ trình bày về các cấu trúc lặp thường gặp trong khi lập trình. Các bạn theo dõi nhé!

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Khi nào dùng Default Methods trong Java 8

Khi nào dùng Default Methods trong Java 8

Ở 2 bài trước chúng ta đã tìm hiểu 2 tính năng mới của Java…

Cách chuyển chữ hoa thành chữ thường trong Java

Cách chuyển chữ hoa thành chữ thường trong Java

Trong bài viết này chúng ta sẽ tìm hiểu về cách chuyển đổi chữ in…

Bài tập tính tổng các số tự nhiên trong Java

Bài tập tính tổng các số tự nhiên trong Java

Các số dương 1, 2, 3, 4, ... được gọi là các số tự nhiên,…

Cách chuyển chữ thường thành chữ hoa trong Java

Cách chuyển chữ thường thành chữ hoa trong Java

Trong chuỗi có thể vừa có ký tự thường vừa có ký tự hoa, nhưng…

Cách viết hoa ký tự đầu tiên trong Java

Cách viết hoa ký tự đầu tiên trong Java

Để hiểu được bài này, các bạn cần có kiến thức căn bản về Java…

Hướng dẫn chuyển đổi giờ phút giây trong Java

Hướng dẫn chuyển đổi giờ phút giây trong Java

Để hiểu được chương trình, các bạn cần có kiến thức cơ bản về Java.…

Cách lấy thời gian hiện tại trong Java

Cách lấy thời gian hiện tại trong Java

Để hiểu được bài viết này, các bạn cần có kiến thức cơ bản sau…

Cách làm tròn số trong Java

Cách làm tròn số trong Java

Khi thực hiện tính toán, việc kết quả ra một con số thập phân dài…

Cách tìm ma trận chuyển vị trong Java

Cách tìm ma trận chuyển vị trong Java

Quá trình hoán đổi giữa hàng và cột được gọi là chuyển vị của ma…

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Cách chuyển ArrayList thành mảng và ngược lại trong Java

Để hiểu được bài này, các bạn cần có kiến thức cơ bản về mảng…

Cách nối hai mảng trong Java

Cách nối hai mảng trong Java

Mình sẽ thực hiện hai chương trình nối mảng. Chương trình thứ nhất nối hai…

Cách xóa khoảng trắng của chuỗi trong Java

Cách xóa khoảng trắng của chuỗi trong Java

Mình sẽ thực hiện hai chương trình khác nhau để các bạn có thể hiểu…

In ra tam giác bằng ký tự * và số trong Java

In ra tam giác bằng ký tự * và số trong Java

Mình sẽ giới thiệu cách để in ra các tam giác bằng ký tự *…

Tìm số lớn nhất trong mảng Java

Tìm số lớn nhất trong mảng Java

Các bạn cần tìm hiểu về mảng, cách khởi tạo và in mảng trong Java…

Tìm ước của một số nguyên trong Java

Tìm ước của một số nguyên trong Java

Trong bài viết này chúng ta sẽ tìm hiểu cách tìm tất cả các ước…

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số hoàn hảo trong Java

Cách kiểm tra số đối xứng trong Java

Cách kiểm tra số đối xứng trong Java

Trong bài viết này chúng ta sẽ kiểm tra một số có phải là số…

Đảo ngược một số trong Java

Đảo ngược một số trong Java

Mình sẽ giới thiệu các bạn cách đảo ngược một số sử dụng vòng lặp…

Tìm bội chung nhỏ nhất trong Java

Tìm bội chung nhỏ nhất trong Java

Mình sẽ sử dụng hai cách khác nhau để tìm BCNN. Cách thứ nhất mình…

Cách hoán đổi hai số trong Java

Cách hoán đổi hai số trong Java

Trong phần này mình sẽ sử dụng một biến tạm temp() làm biến trung gian…

Top