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.
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);
}