題目描述
您附近的圖書館需要您的幫助!給定圖書館借出的書籍之預期和實際歸還的時間,建立一個能計算出逾期罰款的程式。
逾期罰款的規定如下:
如果書是在預期歸還時間還的話,不用繳任何的罰款(fine=0)。
如果書是超過預期歸還時間,且是在同一個月才還的話,那麼要繳交的罰款為fine=15*逾期天數。
如果書是超過預期歸還時間,且是在同一個年才還的話,那麼要繳交的罰款為fine=500*逾期月數。
如果書是超過預期歸還時間才還,且是在隔年才還的話,那麼要繳交的罰款為fine=10000。
如果書是超過預期歸還時間,且是在同一個月才還的話,那麼要繳交的罰款為fine=15*逾期天數。
如果書是超過預期歸還時間,且是在同一個年才還的話,那麼要繳交的罰款為fine=500*逾期月數。
如果書是超過預期歸還時間才還,且是在隔年才還的話,那麼要繳交的罰款為fine=10000。
原題網址
輸入格式
第一行包含三個整數,分別表示天、月、年的數字,為書實際歸還的日期。
第二行包含三個整數,分別表示天、月、年的數字,為書預期歸還的日期。
輸入的日期數字範圍絕對是合法的西曆日期。
輸出格式
輸出罰款(fine)的值。
範例輸入
9 6 2015
6 6 2015
6 6 2015
範例輸出
45
額外解釋
實際歸還時間:2015/6/9
預期歸還時間: 2015/6/6
因為都是在2015年,且都是在6月。接著比較日期的時候可以發現,實際歸還的日期比預期歸還的日期還要晚3天,所以罰款為15*3=45。
解題概念
可以利用Java 8提供的日期與時間的API,使用輸入的日期建立LocalDate物件,來判斷日期的先後,如果有逾期,再套用公式計算罰款即可。
參考答案
import java.time.LocalDate;
import java.util.Scanner;
public class Solution {
public static void main(final String[] args) {
final Scanner sc = new Scanner(System.in);
final int d1 = sc.nextInt();
final int m1 = sc.nextInt();
final int y1 = sc.nextInt();
final LocalDate actuallyReturnDate = LocalDate.of(y1, m1, d1);
final int d2 = sc.nextInt();
final int m2 = sc.nextInt();
final int y2 = sc.nextInt();
final LocalDate expectedReturnDate = LocalDate.of(y2, m2, d2);
final int fine;
if (actuallyReturnDate.isBefore(expectedReturnDate)) {
fine = 0;
} else if (y1 == y2 && m1 == m2) {
fine = 15 * (d1 - d2);
} else if (y1 == y2) {
fine = 500 * (m1 - m2);
} else {
fine = 10000;
}
System.out.println(fine);
}
}