[Thực hành] Kiểm tra năm nhuận

NỘI DUNG BÀI VIẾT

Mục tiêu

Luyện tập sử dụng cấu trúc điều kiện if.

>> Xem ngay Tài liệu Java Core giúp bạn “Nâng Cấp” kỹ năng lập trình

Mô tả

Trong phần này, chúng ta sẽ phát triển một ứng dụng nhằm kiểm tra xem một năm có phải là năm nhuận hay không.

Ứng dụng cho phép người dùng nhập vào một năm, sau đó sẽ đưa ra thông báo là năm đó là năm nhuận hay không phải là năm nhuận.

Năm nhuận là một năm đặc biệt, được cộng thêm một ngày để giữ cho lịch được đồng bộ với lịch thiên văn.

Cách xác định năm nhuận: Những năm chia hết cho 4 là năm nhuận, ngoại trừ những năm chia hết cho 100 mà không chia hết cho 400.

Từ đó, có thể rút gọn thành các quy tắc xác định năm nhuận:

  • Những năm chia hết cho 4 mà không chia hết cho 100 là năm nhuận
  • Những năm chia hết cho 100 mà không chia hết cho 400 thì KHÔNG PHẢI là năm nhuận
  • Những năm chia hết đồng thời cho 100 và 400 là năm nhuận

Hướng dẫn

Bước 1: Khai báo các biến

Scanner scanner = new Scanner(System.in);
int year;

Bước 2: Nhập dữ liệu từ bàn phím

System.out.println("Enter a year: ");
year = scanner.nextInt();

Bước 3: Phân loại và hiển thị kết quả

if(year % 4 == 0){
if(year % 100 == 0){
if(year % 400 == 0){
System.out.printf("%d is a leap year", year);
} else {
System.out.printf("%d is NOT a leap year", year);
}
} else {
System.out.printf("%d is a leap year", year);
}
} else {
System.out.printf("%d is NOT a leap year", year);
}

Bước 4: Chạy và quan sát kết quả.

Nhập vào các năm sau để kiểm tra:

  • 12: năm nhuận
  • 13: năm không nhuận
  • 1000: năm không nhuận
  • 2000: năm nhuận

Lưu ý: Với các điều kiện như trên, chúng ta có thể chỉnh sửa để mã nguồn tốt hơn như sau:

boolean isLeapYear = false;

if(year % 4 == 0){
if(year % 100 == 0){
if(year % 400 == 0){
isLeapYear = true;
}
} else {
isLeapYear = true;
}
}

if(isLeapYear){
System.out.printf("%d is a leap year", year);
} else {
System.out.printf("%d is NOT a leap year", year);
}

Đảm bảo clean code

Trong đoạn mã trên, các điều kiện bên trong các câu lệnh if sẽ là khó hiểu, bởi vì bản thân các biểu thức không trực tiếp nói rõ ý nghĩa của nó. Chúng ta có thể sử dụng kỹ thuật tách biến để các câu lệnh này dễ hiểu hơn. Ví dụ:

boolean isLeapYear = false;

boolean isDivisibleBy4 = year % 4 == 0;
if(isDivisibleBy4){
boolean isDivisibleBy100 = year % 100 == 0;
if(isDivisibleBy100){
boolean isDivisibleBy400 = year % 400 == 0;
if(isDivisibleBy400){
isLeapYear = true;
}
} else {
isLeapYear = true;
}
}

if(isLeapYear){
System.out.printf("%d is a leap year", year);
} else {
System.out.printf("%d is NOT a leap year", year);
}

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Tài liệu + Khóa học lập trình FREE
Tài liệu + Khóa học lập trình FREE

DMCA.com Protection Status