[Thực hành] Tính số ngày trong tháng

Câu lệnh điều kiện

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ả.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Tags:
, , ,

Leave a Reply

Your email address will not be published. Required fields are marked *