題目描述

您附近的圖書館需要您的幫助!給定圖書館借出的書籍之預期和實際歸還的時間,建立一個能計算出逾期罰款的程式。



逾期罰款的規定如下:

如果書是在預期歸還時間還的話,不用繳任何的罰款(fine=0)。
如果書是超過預期歸還時間,且是在同一個月才還的話,那麼要繳交的罰款為fine=15*逾期天數。
如果書是超過預期歸還時間,且是在同一個年才還的話,那麼要繳交的罰款為fine=500*逾期月數。
如果書是超過預期歸還時間才還,且是在隔年才還的話,那麼要繳交的罰款為fine=10000。

原題網址

輸入格式

第一行包含三個整數,分別表示天、月、年的數字,為書實際歸還的日期。
第二行包含三個整數,分別表示天、月、年的數字,為書預期歸還的日期。

輸入的日期數字範圍絕對是合法的西曆日期。

輸出格式

輸出罰款(fine)的值。

範例輸入

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