NỘI DUNG BÀI VIẾT
Mục tiêu
Luyện tập cấu trúc rẽ nhánh dựa trên câu lệnh switch..case
.
Mô tả
Viết một chương trình tính số ngày trong tháng của một tháng cho trước. Trong một năm, tháng 2 có thể có 28 hoặc 29 ngày, các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày, các tháng còn lại có 30 ngày.
Bước 1: Nhận thông tin về tháng
Chương trình cần biết người dùng muốn tìm số ngày của tháng mấy.
Scanner scanner = new Scanner(System.in); System.out.print("Which month that you want to count days? "); int month = scanner.nextInt();
Bước 2: Tính số ngày của tháng 2
Nếu tháng được nhập là tháng 2, việc tính số ngày của tháng sẽ được triển khai rất nhanh:
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Which month that you want to count days? "); int month = scanner.nextInt(); switch (month) { case 2: System.out.print("The month '2' has 28 or 29 days!"); break; } }
Bước 3: Tính số ngày của các tháng có 31 ngày:
Bổ sung trường hợp tháng 1:
switch (month) { case 2: System.out.print("The month '2' has 28 or 29 days!"); break; case 1: System.out.print("The month '" + month + "' has 31 days!"); break; }
Bổ sung trường hợp tháng 3:
switch (month) { case 2: System.out.print("The month '2' has 28 or 29 days!"); break; case 1: System.out.print("The month '" + month + "' has 31 days!"); break; case 3: System.out.print("The month '" + month + "' has 31 days!"); break; }
Ở đây bắt đầu xuất hiện mã lặp.
Với cấu trúc switch
, nếu sau mỗi case
không có câu chỉ dẫn break
, các case sau đó vẫn được xem xét thực thi, điều này giúp ta thực thi cùng một khối chỉ dẫn cho nhiều case
, như sau:
switch (month) { case 2: System.out.print("The month '2' has 28 or 29 days!"); break; case 1: case 3: System.out.print("The month '" + month + "' has 31 days!"); break; }
Bổ sung các case
còn lại của trường hợp tháng có 31 ngày:
switch (month) { case 2: System.out.print("The month '2' has 28 or 29 days!"); break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.print("The month '" + month + "' has 31 days!"); break; }
Thử chạy chương trình và kiểm tra kết quả.
Bước 4: Tính số ngày của các tháng có 30 ngày
Tương tự như bước trước:
switch (month) { case 2: System.out.print("The month '2' has 28 or 29 days!"); break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.print("The month '" + month + "' has 31 days!"); break; case 4: case 6: case 9: case 11: System.out.print("The month '" + month + "' has 30 days!"); break; default: System.out.print("Invalid input!"); break; }
Thực thi chương trình và kiểm tra kết quả.
Buớc 5: khử mã lặp
Chương trình tiếp tục xuất hiện mã lặp, chúng ta cần khử nợ kỹ thuật này trước khi bài toán được coi là hoàn thành.
String daysInMonth; switch (month) { case 2: daysInMonth = "28 or 29"; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: daysInMonth = "31"; break; case 4: case 6: case 9: case 11: daysInMonth = "30"; break; default: daysInMonth = ""; } if (daysInMonth != "") System.out.printf("The month '%d' has %s days!", month, daysInMonth); else System.out.print("Invalid input!");
Thực thi chương trình và kiểm tra kết quả.